每当我希望在Ruby中运行一些外部进程时,我都会写出这样的内容:
output = `outer_process`
这很好,并且过程的输出被放置在“输出”中。但是有时该过程需要很多时间并提供大量输出,我希望在屏幕停止运行之前就可以在屏幕上看到它。有没有办法做到这一点?
看看open4
宝石。有一些限制,但是假设您的流程将输出输出到STDOUT,则可以执行以下操作:
Open4.open4( outer_process ) do | pid, pstdin, pstdout, pstderr |
pstdout.each { |line| puts line }
end
就基本机制而言,这与Anand在评论中的建议非常相似。
请注意,如果您调用的进程没有刷新STDOUT,则此操作将不会立即生效。如果您需要解决该限制,则需要为子进程提供一个终端,这在Ruby中是可能的,但更复杂-请参见对从Ruby中不断从外部进程的STDOUT读取的答案
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句