我们需要使用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吗?
在函数popen上引用python文档Popen.wait()
:
警告,当使用
stdout=PIPE
和/或stderr=PIPE
时将死锁,并且子进程会向管道生成足够的输出,从而阻止进程等待OS管道缓冲区接受更多数据。使用communicate()
避免这种情况。
也许您会陷入僵局。改为使用交流。
p= subprocess.Popen(cmd,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()