Python C 程序子进程挂在“”for line in iter”处
您正在尝试使用以下方式读取 C 程序的输出subprocess.Popen 在 Python 中,但进程挂在“for line in iter(process.stdout.readline, '')”行。这是子进程的一个已知问题,是由 stdout 流的缓冲引起的。
直接在 C 程序中修复 stdout 缓冲区
stdout 流由以下方式缓冲默认。这意味着 C 程序在缓冲区满之前不会向管道发送任何输出。要解决此问题,您可以使用 setvbuf 函数将 stdout 流设置为行缓冲。这将导致 C 程序在写入每一行后立即将输出发送到管道。
或者使用伪 TTY
另一种选择是使用伪- TTY(终端设备)与C程序进行通信。这将允许 C 程序立即将输出发送到管道,即使 stdout 流被缓冲。
或者在不修改 C 程序源代码的情况下修复它
最后,您可以使用 stdbuf 实用程序来更改缓冲类型,而无需修改 C 程序的源代码。该实用程序将允许您强制 C 程序立即将输出发送到管道,即使标准输出流已被缓冲。
以上是为什么我的 Python 子进程在读取 C 程序输出时挂起?的详细内容。更多信息请关注PHP中文网其他相关文章!