我希望能够在Ruby中传输子进程的输出
e.g。
p `ping google.com`
我希望立即看到ping响应;我不想等待这个过程完成。
答案 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)
如果您想同时捕获stdout
和stderr
,可以使用popen2e
:
require 'open3'
Open3.popen2e('do something') do |_stdin, stdout_err, _wait_thr|
stdout_err.each { |line| puts line }
end