我正在编写一个脚本,它使用IO.popen打开另一个程序并不断读取数据.就像这样:
process = IO.popen(["/the/program", "argument", "argument"])
loop do
line = process.gets
puts "#{line}"
end
Run Code Online (Sandbox Code Playgroud)
(实际的程序不仅仅是打印输出,显然 - 这只是一个例子.)
我遇到的问题是popen似乎是从打开的进程中缓冲STDOUT.我已经通过直接从shell运行程序并通过popen并排运行来确认这一点,并且Ruby一次不会获得一行.它总是一次获得多行,并且被延迟.
我试过了
STDOUT.sync = true
Run Code Online (Sandbox Code Playgroud)
...在popen之前,但没有改变任何东西.
有问题的程序肯定使用\n作为新行,所以这不是问题.
你有其他程序的来源吗?您需要强制其他程序刷新其输出,或使您的脚本看起来像pty(请参阅pty标准库).
请参阅此问题以获得有关正在发生的事情的详细说明.
编辑:pty示例代码:
require 'pty'
PTY.spawn "some-command" do |r,w,p|
loop { puts r.gets }
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4779 次 |
| 最近记录: |