在Ruby中输出子进程的输出

Sam*_*Sam 6 ruby

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

例如

p `ping google.com`
Run Code Online (Sandbox Code Playgroud)

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

cor*_*ard 9

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

IO.popen('ping google.com') do |io|
  io.each { |s| print s }
end
Run Code Online (Sandbox Code Playgroud)

干杯!

  • 如果你想捕获`STDERR`,不要忘记`popen3`. (2认同)

Dyl*_*kow 6

你应该使用IO #popen:

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