如果我运行两次通信功能,谁能解释为什么会出现此错误?

例如

from subprocess import *
SVN=Popen('which svn', shell=True, stdout=PIPE)
print SVN.communicate()[0]

返回
"/usr/bin/svn"

但是再次运行通信...
print SVN.communicate()[0]

返回...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py",     line 746, in communicate
stdout = _eintr_retry_call(self.stdout.read)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 478, in _eintr_retry_call
return func(*args)
ValueError: I/O operation on closed file

最佳答案

因为实际上是被调用程序的标准输出的"file"已经关闭。这意味着您已经阅读了之前 communicate() 中的所有输出,因此再次调用它永远不会产生任何结果。

关于python - 不能运行 Popen.communicate() 两次。 (Python 子流程模块),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15319340/

10-11 07:41