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:_r...@web.de] > Sent: Thursday, April 16, 2009 14:13 > To: python-list@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 <---- > > -- http://mail.python.org/mailman/listinfo/python-list