gpt4 book ai didi

Ruby IO.popen STDOUT 缓冲

转载 作者:数据小太阳 更新时间:2023-10-29 06:58:56 25 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本使用 IO.popen 打开另一个程序并持续读取数据。是这样的:

process = IO.popen(["/the/program", "argument", "argument"])

loop do
line = process.gets
puts "#{line}"
end

(实际的程序不仅仅是打印输出,显然 - 这只是一个例子。)

我遇到的问题是 popen 似乎在缓冲来自已打开进程的 STDOUT。我已经通过直接从 shell 并通过 popen 并排运行程序来确认这一点,而 Ruby 永远不会一次获得一行。它总是一次获取多行,并且有延迟。

我试过了

STDOUT.sync = true

...在 popen 之前,但这并没有改变任何东西。

有问题的程序肯定使用\n 作为新行,所以这不是问题。

最佳答案

你有其他程序的源代码吗?您要么需要强制其他程序刷新其输出,要么使您的脚本看起来像一个 pty(请参阅 pty 标准库)。

参见 this question以便更好地解释正在发生的事情。

编辑:pty示例代码:

require 'pty'
PTY.spawn "some-command" do |r,w,p|
loop { puts r.gets }
end

关于Ruby IO.popen STDOUT 缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com