python subprocess.Popen.communicate()关闭p.stdout和p.stderr文件,但在哪里?

时间:2013-03-08 02:24:22

标签: python subprocess

p = subprocess.Popen("sleep 5 ; ls -l", shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p.communicate()

我在看/usr/lib/python2.6/subprocess.py

我非常清楚地看到stdoutstderrp.communicate()stdoutsdterr的情况下已关闭除了None

但是当stdin _communicate()p.stdout时,我无法确定代码在p.stderr的调用何时关闭Popen对象的stdinNone在我上面的例子中?

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

_communicate_with_poll中,关闭在close_unregister_and_remove完成,在_communicate_with_select中有两行代码self.stdout.close()seld.stderr.close()来完成工作。有_communicate的第三种实现,但它仅用于MS Windows。该实现似乎没有关闭stdoutstderr