[Chicago] capturing output from subprocesses
Ian Bicking
ianb at colorstudy.com
Tue Nov 8 01:20:18 CET 2005
Noel Thomas Taylor wrote:
> I just joined the list and hope to come to the meeting this Thursday. If I
> can't, however, I wonder if someone could help me with a very tricky
> problem...
>
> A couple of months ago I started trying to find a way to launch a
> subprocess in python that would allow the parent to capture the stdout
> and stderr of the child, time the duration of the child, and abort the
> child if it had failed to produce output after 'n' seconds. Also, the
> solution should perform consistently across all Unices (Windows doesn't
> matter) and if the child must be aborted, whatever output it produced up
> to that point should still be captured.
>
> There are several solutions out there, but most do not capture the output
> of the child in real time. You always have to wait for the child to
> terminate until you can see any of its output, and consequently if the
> child must be aborted because it gets stuck, you lose whatever output it
> generated before you killed it.
The subprocess module can do this. It's a little funny, because it
doesn't allow streaming using proc.communicate(), and I find it
difficult to do normal piping because of the blocking.
But if you look at the bottom of this file there's a function
proc_communicate allows you to communicate using Python file-like objects:
http://svn.pythonpaste.org/Paste/trunk/paste/cgiapp.py
It's basically a slight rewrite of Proc.communicate(). There's already
some patches filed for this issue, so hopefully subprocess in Python 2.5
will make this easier.
--
Ian Bicking / ianb at colorstudy.com / http://blog.ianbicking.org
More information about the Chicago
mailing list