get text from rogramms runn by subprocess.Popen immediatetly

Barak, Ron Ron.Barak at lsi.com
Thu Apr 16 08:28:31 EDT 2009


Maybe try:

p = Popen('./iodummy',stdin=PIPE, stdout=PIPE, stderr=PIPE).p

(see "18.1.3.4. Replacing the os.spawn family" in http://docs.python.org/library/subprocess.html)

Bye,
Ron. 

> -----Original Message-----
> From: Rüdiger Ranft [mailto:_rdi_ at web.de] 
> Sent: Thursday, April 16, 2009 14:13
> To: python-list at python.org
> Subject: get text from rogramms runn by subprocess.Popen immediatetly
> 
> 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.
> 
> Beneath is a test which shows what I did
> 
> TIA
> Rudi
> 
> ----8<-------8<-------8<-- iodummy.cpp -8<-------8<--- 
> #include <iostream> #include <unistd.h>
> 
> int main()
> {
>         for( int i = 0; i < 10; i++ )
>         {
>                 std::cerr << i << std::endl;
>                 sleep(2);
>         }
> }
> 
> from subprocess import Popen, PIPE
> from time import sleep
> 
> p = Popen('./iodummy',stdin=PIPE, stdout=PIPE, stderr=PIPE)
> sleep(3)
> # now I expect '0\n1\n' in stderr, but read() blocks until # 
> the end of iodummy.
> print p.stderr.read()
> p.wait()
> 
> --
> GPG encrypted mails preferred.
> GPG verschlüsselte Mails bevorzugt.
> ---> http://chaosradio.ccc.de/media/ds/ds085.pdf Seite 20 <----
> 
> 


More information about the Python-list mailing list