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

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

Barbara Streisand
发布: 2024-11-14 16:17:02
原创
484 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板