Если a
, b
и c
- это команды, обычно доступные из командной строки, тогда вы можете использовать:
captured_output = `a | b | c`
Ruby будет запускать команды в под-оболочке,и перехватите STDOUT.
Если вам по какой-то причине необходимо направить вывод в файл, вы также можете добавить перенаправление в команду.В этом случае STDOUT не будет возвращен вам, но вы можете открыть файл и обработать его вручную:
`a | b | c > captured_output`
File.foreach('captured_output') do |li|
print li
end
Он не предлагает такого большого контроля, как при использовании system
или popen3
, ноудобно:
>> sin, sout, serr = Open3.popen3('ls -al | tail -1') #=> [#<IO:fd 4>, #<IO:fd 5>, #<IO:fd 7>, #<Thread:0x00000100bb8798 run>]
>> sout.read #=> "drwxr-xr-x 3 greg staff 102 Nov 2 21:01 python\n"