我正在尝试在Python 3中运行子进程并不断读取输出。
在Python 3的subprocess
文档中,我看到以下内容:
Popen.wait(超时=无)
等待子进程终止。设置并返回returncode属性。 警告使用stdout = PIPE和/或stderr = PIPE 时会出现死锁 并且子进程为管道生成足够的输出 块等待OS管道缓冲区接受更多数据。使用 communication()以避免这种情况。
这让我觉得我应该使用communicate
,因为来自stdout的数据量非常大。但是,再次阅读文档会显示:
Popen.communicate(输入=无,超时=无)......
与流程交互:将数据发送到stdin。从stdout和stderr读取数据,直到达到文件结尾。
注意读取的数据缓冲在内存中,因此如果数据大小很大,请不要使用此方法 无限制。
所以再次看来,这样从子过程中读出标准星似乎存在问题。有人可以告诉我运行子进程并读取所有(可能是大量的)stdout的最佳/最安全的方法吗?
答案 0 :(得分:2)
我认为你应该使用沟通。该消息警告您方法的默认行为的性能问题。事实上,popen构造函数有一个缓冲区大小参数,可以调整它以提高大数据量的大量性能。
我希望它会有所帮助:)