Simultaneous output parsing of child process?

John Roth newsgroups at jhrothjr.com
Thu Oct 2 12:43:09 EDT 2003


"Fraser Gordon" <fraser.gordon at cognos.com> wrote in message
news:deb65cae.0310020645.3af9cf62 at posting.google.com...
> Hello,
>
> Hopefully someone can help me out with this issue...
>
> I have a python script that needs to run a shell command and be able
> to react to output from that command as it occurs (as opposed to
> waiting for the whole command to complete and then parsing the
> output).  Is this possible with Python?
>
> I created a test script that prints a line of output to stdout every 4
> seconds or so.  I want to create a "parent" script that kicks off the
> test script, and prints data as soon as the test script sends anything
> to the standard output (ie. every 4 seconds).
>
> Furthermore, the solution needs to support Windows, several flavors of
> UNIX and potentially LINUX.
>
> I would ideally like to have the following type of behaviour:
>
> childPipe = kickOffChild('test.py')
> while <child process still active>:
>     line = childPipe.checkForStdOutput()
>     if line:    # This should trigger once every 4 seconds in the
> example above
>         print "OUTPUT:", line
> print "Process completed."
>
>
> Any help would be greatly appreciated.

You need to use separate threads to process stdin, stdout and
stderr. Otherwise, you'll run the risk of a deadlock.

Unfortunately, the select service does not work on Windows
in all circumstances, so you can't simply switch between the
different files as needed.

John Roth



>
> Fraser






More information about the Python-list mailing list