Проверьте Process.spawn
, Open3
и драгоценный камень childprocess
.
Я не могу точно сказать, что вы там пытаетесь сделать, но вы можете контролировать IO дочернего процесса разными способами.
Использование каналов Unix:
readme, writeme = IO.pipe
pid = fork {
$stdout.reopen writeme
readme.close
exec(...)
}
Жонглирование ввода-вывода с помощью Process.spawn
:
pid = spawn(command, :err=>:out)
Или завершение процесса в POpen3
:
require 'open3'
include Open3
popen3(RUBY, '-r', THIS_FILE, '-e', 'hello("Open3", true)') do
|stdin, stdout, stderr|
stdin.write("hello from parent")
stdin.close_write
stdout.read.split("\n").each do |line|
puts "[parent] stdout: #{line}"
end
stderr.read.split("\n").each do |line|
puts "[parent] stderr: #{line}"
end
Вы также можете рассмотреть Джесси Стоимера Работа с процессами Unix .У него много информации, и его стиль письма очень легко читать и понимать.Книга служит справочным пособием, которое несколько полезнее, чем большая часть фактической документации.
ссылки: