首页 >后端开发 >Python教程 >Python中如何实现子进程的实时输出?

Python中如何实现子进程的实时输出?

Barbara Streisand
Barbara Streisand原创
2024-11-14 16:17:02525浏览

How to Achieve Real-Time Output from Subprocess in Python?

使用子进程进行实时输出

在尝试创建带有进度指示器的包装器脚本时,您遇到了一个挑战,其中包装器的输出尽管使用 subprocess.Popen 和 stdout=PIPE,程序还是被缓冲了。正如您所发现的,将 bufsize 设置为 1 或 0 或使用输出循环都无法解决该问题。

解决方案:使用 readline

幸运的是,我们偶然发现了一种解决方法:利用 stdout 管道的 readline 方法。与您最初使用的积极缓冲的 for 循环方法不同,使用 readline 增强的 while True 循环表现出所需的行为。

<br>while True:<br> line = p.stdout。 readline()<br> 如果不是行:break<br> ...<br>

潜在问题

此问题源自Python 中的已知 bug,追踪为问题 3907。异常缓冲的具体原因尚不清楚。

结论

通过利用 readline 方法,您可以实现通过子进程启动的程序的实时输出,无需诉诸过时或可能不安全的技术,如 exec*。此解决方法在 3.x 以上的 Python 版本中仍然有效,确保向前兼容性。

以上是Python中如何实现子进程的实时输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

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