Skip to content Skip to sidebar Skip to footer

Python Popen().stdout.read() Hang

I'm trying to get output of another script, using Python's subprocess.Popen like follows process = Popen(command, stdout=PIPE, shell=True) exitcode = process.wait() output = proces

Solution 1:

You probably want to use .communicate() rather than .wait() plus .read(). Note the warning about wait() on the subprocess documentation page:

Warning This will deadlock when using stdout=PIPE and/or stderr=PIPE and the child process generates enough output to a pipe such that it blocks waiting for the OS pipe buffer to accept more data. Use communicate() to avoid that.

http://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait

Solution 2:

read() waits for EOF before returning.

You can:

  • wait for the subprocess to die, then read() will return.
  • use readline() if your output is broken into lines (will still hang if no output lines).
  • use os.read(F,N) which returns at most N bytes from F, but will still block if the pipe is empty (unless O_NONBLOCK is set on the fd).

Solution 3:

You can see how to deal with hanging reading of stdout/stderr in the next sources:

readingproc

Post a Comment for "Python Popen().stdout.read() Hang"