我有一个写stdout和stderr的程序。我想从python运行它,捕获stdout和stderr。我的代码看起来像:
from subprocess import *
p = Popen( exe, shell=TRUE, stdout=PIPE, stderr=PIPE )
rtrncode = p.wait()
对于一些程序来说,这很好,但是当我添加一个新的程序时,新的程序将永远挂起。如果删除stdout=PIPE
,程序会将其输出写入控制台并完成,一切正常。我怎样才能确定是什么导致了绞刑?
在WindowsXP上使用Python2.5。程序既没有从stdin中读取,也没有任何用户输入(即“击键”)。
当管道的缓冲区填满(通常为4KB左右)时,写入进程会停止,直到读取进程读取了一些有问题的数据;但是在这里,在完成子进程之前,您不会读取任何内容,因此会出现死锁。The docs关于
wait
说得非常清楚:如果由于某种原因无法使用
communicate
,请让子进程写入临时文件,然后可以wait
并在文件准备就绪时读取该文件——写入文件而不是管道不会导致死锁。看看docs。它指出你不应该使用wait,因为它会导致死锁。尝试使用communicate。
相关问题 更多 >
编程相关推荐