使用Popen.wait()时遇到死锁。

问题描述 投票:0回答:1

我们需要执行一个系统命令,使用 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 large-files hung
1个回答
2
投票

引用python文档 罂粟花 在功能上 Popen.wait():

警告 当使用 stdout=PIPEstderr=PIPE 和子进程产生足够的输出到管道上,从而阻止等待操作系统管道缓冲区接受更多的数据。使用 communicate() 以避免这种情况。

也许你会陷入僵局,用沟通代替。

p= subprocess.Popen(cmd,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()
© www.soinside.com 2019 - 2024. All rights reserved.