2009/5/7 Øystein Johansen (OJOHANS) <ojoh...@statoilhydro.com>: > Hi, > > I have problems understanding the subprocess.Popen object. I have a > iterative calculation in a process running and I want to pipe the output > (stdout) from this calculation to a Python script. > > Let me include a simple code that simulates the calculating process: > /* This code simulates a big iterative calculation */ > #include <stdio.h> > #include <math.h> > > int main() > { > float val[2] = { M_PI, M_E }; > int i; > > for ( i = 0; i < 2 i++) { > sleep( 15 ); /* It's a hard calculation. It take 15 seconds */ > printf("Value: %5.6f\n", val[i] ); > fflush( stdout ); > } > return 0; > } > > let's compile this to mycalc: gcc -o mycalc calc.c ... (untested code) > > In C I have this code which starts the mycalc process and handles the output > from it: > > #include <stdio.h> > #include <assert.h> > #define BUF_SIZE 256 > > int main() > { > FILE *pip; > char line[BUF_SIZE]; > > pip = popen("mycalc", "r"); > assert( pip != NULL ); > > while ( fgets( line, BUF_SIZE, pip )) { > printf( "Hello; I got: %s \n", line ); > fflush( stdout ); > } > pclose( pip ); > return 0; > } > How can I make such while-loop in Python? I assume I should use > subprocess.Popen(), but I can't figure out how?
import subprocess subprocess.call(["./mycalc"]) # add `bufsize=-1` as argument to have output be buffered #process inherits our filehandles and writes directly to them #.call() only returns once the process has exited Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list