即使关闭文件对象,我们也如何读取它

问题描述 投票: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
投票

在函数popen上引用python文档Popen.wait()

警告,当使用stdout=PIPE和/或stderr=PIPE时将死锁,并且子进程会向管道生成足够的输出,从而阻止进程等待OS管道缓冲区接受更多数据。使用communicate()避免这种情况。

也许您会陷入僵局。改为使用交流。

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