get text from rogramms runn by subprocess.Popen immediatetly
jeremiah.dodds at gmail.com
Thu Apr 16 14:30:10 CEST 2009
On Thu, Apr 16, 2009 at 12:12 PM, Rüdiger Ranft <_rdi_ at web.de> wrote:
> 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
> ----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;
> from subprocess import Popen, PIPE
> from time import sleep
> p = Popen('./iodummy',stdin=PIPE, stdout=PIPE, stderr=PIPE)
> # now I expect '0\n1\n' in stderr, but read() blocks until
> # the end of iodummy.
> print p.stderr.read()
> GPG encrypted mails preferred.
> GPG verschlüsselte Mails bevorzugt.
> ---> http://chaosradio.ccc.de/media/ds/ds085.pdf Seite 20 <----
Depending on what exactly you're doing (like if you need to send info back
to the program you're spawning), the socket module might be of use. I use it
to communicate between Perl and Python for some stuff I have to do at work,
and it works out rather well.
Specifically, I've found sockets and JSON to work really nicely for
inter-language program communication.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-list