0
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.stdoutp.stderr用于 Popen 对象,只有stdinNone我上面的示例中?

有人可以帮忙吗?

4

1 回答 1

3

_communicate_with_poll中,关闭是在其中完成的,并且close_unregister_and_remove_communicate_with_select两行代码可以完成这项工作。还有第三种实现,但它只在 MS Windows 上使用。该实现似乎没有关闭和!self.stdout.close()seld.stderr.close()_communicatestdoutstderr

于 2013-03-08T03:02:02.410 回答