Simultaneous output parsing of child process?

F

Fraser Gordon

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.

Fraser
 
E

Emile van Sebille

Fraser Gordon said:
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.


Perhaps something that Donn Cave posted a few years ago helps, particularly
the bonus version ;-):

http://groups.google.com/[email protected]

It doesn't work as is on windows, but I've used it as a base on linux
several times.

HTH,
 
J

John Roth

Fraser Gordon said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,767
Messages
2,569,570
Members
45,045
Latest member
DRCM

Latest Threads

Top