我正试图做相反的事情
我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.
我当时认为将它包装在expect
脚本中或使用proc_open()
PHP中的它会这样做,但事实并非如此.
有什么想法吗?
我正在编写一个脚本,它使用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作为新行,所以这不是问题.