我的程序在Linux上控制外部应用程序,通过管道将输入命令传递到外部应用程序stdin,并通过外部应用程序stdout的管道读取输出结果.
问题是对管道的写入是按块缓冲的,而不是按行缓冲的,因此在我的应用程序接收外部应用程序输出数据之前会发生延迟.无法更改外部应用程序以添加显式fflush()调用.
当我将外部应用程序设置为/ bin / cat -n(它回显输入,添加了行号)时,它正常工作,看起来,猫在每行之后刷新.强制外部应用程序刷新的唯一方法是向它发送exit命令;当它收到命令时,它会刷新,所有答案都会在退出之前出现在标准输出上.
我很确定,Unix管道对于那种进程间通信(伪服务器 – 客户端)来说是合适的解决方案,但也许我错了.
(我刚刚从一个类似的问题中复制了一些文字:Force another program’s standard output to be unbuffered using Python)
解决方法:
不要使用管道.请改用pty. Pty(伪ttys)具有线缓冲的好处,如果你需要它,它为你的数据流提供了简单的框架.