相关疑难解决方法(0)

欺骗应用程序认为它的标准输出是一个终端,而不是管道

我正试图做相反的事情

检测stdin是终端还是管道?

我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.

我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.

有什么想法吗?

bash terminal stdin pipe

137
推荐指数
7
解决办法
5万
查看次数

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
查看次数

标签 统计

bash ×1

pipe ×1

popen ×1

ruby ×1

stdin ×1

terminal ×1