subprocess call is not waiting.
Gene Heskett
gheskett at wdtv.com
Wed Sep 19 11:57:47 EDT 2012
On Wednesday 19 September 2012 11:56:44 Hans Mulder did opine:
> On 19/09/12 12:26:30, andrea crotti wrote:
> > 2012/9/18 Dennis Lee Bieber <wlfraed at ix.netcom.com>:
> >> Unless you have a really massive result set from that "ls",
> >> that
> >>
> >> command probably ran so fast that it is blocked waiting for someone
> >> to read the PIPE.
> >
> > I tried also with "ls -lR /" and that definitively takes a while to
> > run, when I do this:
> >
> > proc = subprocess.Popen(['ls', '-lR', '/'], stdout=subprocess.PIPE,
> > stderr=subprocess.PIPE)
> >
> > nothing is running, only when I actually do
> > proc.communicate()
> >
> > I see the process running in top..
> > Is it still an observation problem?
>
> Yes: using "top" is an observation problem.
>
> "Top", as the name suggests, shows only the most active processes.
>
Which is why I run htop in a shell 100% of the time. With htop, you can
scroll down and see everything.
> It's quite possible that your 'ls' process is not active, because
> it's waiting for your Python process to read some data from the pipe.
>
> Try using "ps" instead. Look in thte man page for the correct
> options (they differ between platforms). The default options do
> not show all processes, so they may not show the process you're
> looking for.
>
> > Anyway I also need to know when the process is over while waiting, so
> > probably a thread is the only way..
>
> This sounds confused.
>
> You don't need threads. When 'ls' finishes, you'll read end-of-file
> on the proc.stdout pipe. You should then call proc.wait() to reap
> its exit status (if you don't, you'll leave a zombie process).
> Since the process has already finished, the proc.wait() call will
> not actually do any waiting.
>
>
> Hope this helps,
>
> -- HansM
Cheers, Gene
--
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
My web page: <http://coyoteden.dyndns-free.com:85/gene> is up!
To know Edina is to reject it.
-- Dudley Riggs, "The Year the Grinch Stole the Election"
More information about the Python-list
mailing list