首页 >后端开发 >Python教程 >为什么我的 Python 子进程在读取 C 程序输出时挂起?

为什么我的 Python 子进程在读取 C 程序输出时挂起?

Susan Sarandon
Susan Sarandon原创
2024-11-17 19:20:02944浏览

Why Does My Python Subprocess Hang When Reading C Program Output?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn