在Ruby中输出子进程的输出

时间:2012-01-04 18:46:16

标签: ruby

我希望能够在Ruby中传输子进程的输出

e.g。

p `ping google.com`

我希望立即看到ping响应;我不想等待这个过程完成。

3 个答案:

答案 0 :(得分:9)

您可以执行以下操作,而不是使用反引号:

IO.popen('ping google.com') do |io|
  io.each { |s| print s }
end

干杯!

答案 1 :(得分:6)

您应该使用IO#popen

IO.popen("ping -c 3 google.com") do |data|
  while line = data.gets
    puts line
  end
end

答案 2 :(得分:3)

如果您想同时捕获stdoutstderr,可以使用popen2e

require 'open3'

Open3.popen2e('do something') do |_stdin, stdout_err, _wait_thr|
  stdout_err.each { |line| puts line }
end