我们需要执行一个系统命令,使用 subprocess.Popen()
.
由于输出的数据比较大,当我们尝试使用 Popen.wait()
它被卡住了。
pipe= subprocess.Popen(cmd, shell=False,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
pipe.wait()
所以,我们试图把 Popen.stdout
变幻莫测 pstdout
. 之后 pstdout
被关闭,我们无法获取该文件中的内容。
pipe.stdout.closed
pstdout.closed
有谁能帮助我们如何避免这种挂起的情况,或者如何重新打开这个文件?pstdout
?
引用python文档 罂粟花 在功能上 Popen.wait()
:
警告 当使用
stdout=PIPE
或stderr=PIPE
和子进程产生足够的输出到管道上,从而阻止等待操作系统管道缓冲区接受更多的数据。使用communicate()
以避免这种情况。
也许你会陷入僵局,用沟通代替。
p= subprocess.Popen(cmd,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()