Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 = process.stdout.read()   # hangs here

It hangs at the third line, only when I run it as a python script and I cannot reproduce this in the python shell.

The other script prints just a few words and I am assuming that it's not a buffer issue.

Does anyone has idea about what I am doing wrong here?

like image 673
lyomi Avatar asked Jan 21 '13 06:01

lyomi


1 Answers

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

like image 164
Amber Avatar answered Oct 03 '22 15:10

Amber