Я уже сталкивался с таким же вопросом раньше, и " Управление процессами " ответило на все мои потребности.
Если вы не хотите отделять ошибку от обычного вывода, просто используйте popen
:
output = IO.popen("other_program", "w+") do |pipe|
pipe.puts "here, have some input"
pipe.close_write
pipe.read
end
но если вы хотите, используйте popen3
:
Open3.popen3('nroff -man') { |stdin, stdout, stderr| ... }