Problems with background processes on Windows

Tim Roberts timr at probo.com
Sat Mar 28 07:19:10 CET 2009


geoff.bache at gmail.com wrote:
>
>The following code behaves differently on Windows and Linux using
>Python 2.5.2. The Linux behaviour is what I expect in both places :)
>Perhaps somebody could help explain this. Or maybe it is a Python bug.
>Or a Windows feature...
>...
>On Windows if I run "communicate.py" it does not return for 10
>seconds, i.e. until the "grandchild" background process terminates. On
>Linux it returns immediately as I would expect.
>
>If I replace "p.communicate()" with "p.wait()" it returns immediately
>on both. If I don't point stdin, stdout and stderr of the child
>process to os.devnull then it will wait 10 seconds on Linux also,
>which I'd also expect as we can't collect info from these places if
>they've been forwarded elsewhere. It seems like Windows somehow
>doesn't notice this.

If you trace through this:
    python -m trace --trace communicate.py

you'll see that it hangs in subprocess in the stdout_thread waiting for
stdout to close.

I'm not sure I expect this to work as you expect.  When you open a null
device, it's just another file handle.  Why should the behavior be
different?
-- 
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.



More information about the Python-list mailing list