2

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

output = `outer_process`

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

4

1 回答 1

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的答案

于 2013-07-09T12:20:23.223 回答