小编Edd*_*die的帖子

Ruby IO.popen STDOUT缓冲

我正在编写一个脚本,它使用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作为新行,所以这不是问题.

ruby popen

7
推荐指数
1
解决办法
4779
查看次数

标签 统计

popen ×1

ruby ×1