Ruby:即时查看外部调用的输出

时间:2013-07-09 11:34:30

标签: ruby

每当我希望在Ruby中运行一些外部进程时,我会写下这样的内容:

output = `outer_process`

这很有效,并且过程的输出被放入“输出”。但有时这个过程需要花费很多时间并提供大量输出,我希望在它停止运行之前在屏幕上看到它。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

看看open4宝石。有一些限制,但假设您的流程输出到STDOUT,您可以执行以下操作:

Open4.open4( outer_process ) do | pid, pstdin, pstdout, pstderr |
  pstdout.each { |line| puts line }
end

就基础机制而言,这与Anand在评论中的建议非常相似。

请注意,如果您调用的进程没有刷新STDOUT,则无法立即生效。如果您需要解决这个限制,您将需要为子进程提供一个终端,这可以在Ruby中使用,但更复杂 - 请参阅Continuously read from STDOUT of external process in Ruby的答案