我的程序正在控制 Linux 上的外部应用程序,通过管道将输入命令传递到外部应用程序 stdin,并通过管道从外部应用程序 stdout 读取输出结果。
问题在于,对管道的写入是按块缓冲的,而不是按行缓冲的,因此在我的应用程序接收外部应用程序输出的数据之前会发生延迟。无法更改外部应用程序以添加显式 fflush() 调用。
当我将外部应用程序设置为/bin/cat -n(它回显输入,并添加行号),看起来它工作正常,cat每行后刷新。强制外部应用程序刷新的唯一方法是发送exit对它发出命令;当它收到命令时,它会刷新,并且所有答案都会在退出之前出现在标准输出上。
我很确定,Unix 管道是这种进程间通信(伪服务器-客户端)的合适解决方案,但也许我错了。
(我刚刚复制了类似问题的一些文字:使用 Python 强制另一个程序的标准输出不被缓冲 https://stackoverflow.com/questions/1544050/force-another-programs-standard-output-to-be-unbuffered-using-python)
不要使用管道。请改用 pty。如果需要的话,Pty(伪 tty)具有行缓冲的优点,这为您的数据流提供了简单的框架。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)