Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #31632 > unrolled thread

Watching output and put back in background

Started byandrea crotti <andrea.crotti.0@gmail.com>
First post2012-10-18 14:05 +0100
Last post2012-10-19 15:22 +0100
Articles 2 — 2 participants

Back to article view | Back to comp.lang.python


Contents

  Watching output and put back in background andrea crotti <andrea.crotti.0@gmail.com> - 2012-10-18 14:05 +0100
    Re: Watching output and put back in background Nobody <nobody@nowhere.com> - 2012-10-19 15:22 +0100

#31632 — Watching output and put back in background

Fromandrea crotti <andrea.crotti.0@gmail.com>
Date2012-10-18 14:05 +0100
SubjectWatching output and put back in background
Message-ID<mailman.2428.1350565561.27098.python-list@python.org>
In one process I need to run many quite weird shell commands that take a
long time, possibly in parallel.

Now the problem is that I need to catpure the initial standard error of
the command and then I can go on with the second one, but how can I do
that?

It should be something like

Popen(long_command..)

- first line output
- second line
- interesting line

.. more things ..

But if I just do

out, err = proc.communicate()

it will hang there until the end, right?

Maybe a solution would be to redirect the stderr to file and watch that
instead..

Or otherwise I could use a thread for each shell command, but I would
like to avoid head-aches with possible race-conditions..

Ideas?

[toc] | [next] | [standalone]


#31746

FromNobody <nobody@nowhere.com>
Date2012-10-19 15:22 +0100
Message-ID<pan.2012.10.19.14.22.39.494000@nowhere.com>
In reply to#31632
On Thu, 18 Oct 2012 14:05:58 +0100, andrea crotti wrote:

> Maybe a solution would be to redirect the stderr to file and watch that
> instead..
> 
> Or otherwise I could use a thread for each shell command, but I would like
> to avoid head-aches with possible race-conditions..

If you're running multiple concurrent commands, and you have redirected
their output streams to pipes, something needs to keep reading those pipes
if you don't want the commands to hang.

Rather than having a separate thread for each process, you could have a
single thread which manages all "background" processes using select(),
poll() or non-blocking I/O, but that's easier to do on Unix than on
Windows (Popen.communicate() uses a pair of threads on Windows).

Redirecting output to files then reading them upon completion is the
simplest solution, but you can't easily monitor progress that way (there's
no easy way to get notification when more output is written).

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web