Ответ 1
-
используйте backticks, если вы хотите легко захватить вывод программы в переменной. вы, вероятно, хотите использовать это только для коротких программ, потому что это будет заблокировано.
-
system
удобно в двух разных случаях:а. У вас есть длинная работающая программа, и вы хотите, чтобы вывод печатался при запуске (например,
system("tar zxvf some_big_tarball.tar.gz")
)б.
system
может обойти расширение оболочки, например,exec
(сравните выводsystem "echo *"
иsystem "echo", "*"
)пока не завершится подпроцесс.
-
fork
имеет пару различных вариантов использования:а. Вы хотите запустить некоторый код ruby в отдельном процессе (например,
fork { .... }
б. Вы хотите запустить дочерний процесс (или другую программу), не блокируя прогресс вашего script
fork { exec "bash" }
.fork
является вашим другом, если вы хотите демонизировать вашу программу. -
IO.popen
полезен, когда вам нужно взаимодействовать со стандартным и стандартным программным обеспечением. Обратите внимание, что он не фиксирует стандартную ошибку, поэтому вам нужно перенаправить это с помощью2>&1
, если вам это интересно. -
popen3
дает вам отдельный файловый дескриптор стандартной ошибки (если вам нужно сделать это отдельно от стандартного) -
PTY.spawn
необходим, если вы хотите, чтобы порожденная программа вела себя так, как будто вы работаете с терминалом. См. Разницуgrep --color=auto pat file
при порождении с помощьюsystem
vsPTY.spawn