p = subprocess.Popen("sleep 5 ; ls -l", shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p.communicate()
我在看/usr/lib/python2.6/subprocess.py
我非常清楚地看到stdout
和stderr
在p.communicate()
或stdout
为sdterr
的情况下已关闭除了None
。
但是当stdin
_communicate()
为p.stdout
时,我无法确定代码在p.stderr
的调用何时关闭Popen对象的stdin
和None
在我上面的例子中?
有人可以帮忙吗?
答案 0 :(得分:3)
在_communicate_with_poll
中,关闭在close_unregister_and_remove
完成,在_communicate_with_select
中有两行代码self.stdout.close()
和seld.stderr.close()
来完成工作。有_communicate
的第三种实现,但它仅用于MS Windows。该实现似乎没有关闭stdout
和stderr
!