Can't run Popen.communicate() twice. (Python subprocess module)

popen, python, subprocess

Solution

Because the "file", which is actually the stdout of the program being invoked, has been closed. This means you have already read all the output in the previous `communicate()`, so calling it again can never produce anything.

Problem

Can anyone explain why I get this error if I run the communicate function twice? For instance ``` from subprocess import * SVN=Popen('which svn', shell=True, stdout=PIPE) print SVN.communicate()[0] ``` returns ``` "/usr/bin/svn" ``` but running communicate again... ``` print SVN.communicate()[0] ``` returns... ``` 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 ```

Original source