get text from rogramms runn by subprocess.Popen immediatetly

Diez B. Roggisch deets at nospam.web.de
Thu Apr 16 09:45:01 EDT 2009


Rüdiger Ranft schrieb:
> Diez B. Roggisch schrieb:
>> Rüdiger Ranft schrieb:
>>> Hi all,
>>>
>>> I need to call some programms and catch their stdout and stderr streams.
>>> While the Popen class from subprocess handles the call, I get the
>>> results of the programm not until the programm finishes. Since the
>>> output of the programm is used to generate a progress indicator, I need
>>> a way to acces the values written to stdout/stderr as fast as possible.
>> Use the communicate()-method of Popen-objects.
> 
> It gives the same behavior, the first call to communicate gets all text,
> the second gives a closed handle error :(. I also tried
> p.communicate(''), which gives the same as p.communicate(None) result.

That's likely due to buffering then. You could try & see if flushing on 
the side of the subprocess works (you can't do that from python's side 
of things within this scenario).

Or you might want to use pexpect that emulates a pseudo-terminal which 
also changes the way data is displayed.

Diez



More information about the Python-list mailing list