Run Process and Don't Wait Run Process and Don't Wait windows windows

Run Process and Don't Wait


This call doesn't wait for the child process to terminate (on Linux). Don't ask me what close_fds does; I wrote the code some years ago. (BTW: The documentation of subprocess.Popen is confusing, IMHO.)

proc = Popen([cmd_str], shell=True,             stdin=None, stdout=None, stderr=None, close_fds=True)

Edit:

I looked at the the documentation of subprocess, and I believe the important aspect for you is stdin=None, stdout=None, stderr=None,. Otherwise Popen captures the program's output, and you are expected to look at it. close_fds makes the parent process' file handles inaccessible for the child.


I finally got this to work. I'm running "Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] win32". Here's how I had to code it:

from subprocess import PopenDETACHED_PROCESS = 0x00000008cmd = [    sys.executable,    'c:\somepath\someprogram.exe',    parm1,    parm2,    parm3,]p = Popen(    cmd, shell=False, stdin=None, stdout=None, stderr=None,    close_fds=True, creationflags=DETACHED_PROCESS,)

This turns off all piping of standard input/output and does NOT execute the called program in the shell. Setting 'creationflags' to DETACHED_PROCESS seemed to do the trick for me. I forget where I found out about it, but an example is used here.


I think the simples way to implement this is using the os.spawn* family of functions passing the P_NOWAIT flag.

This for example will spawn a cp process to copy a large file to a new directory and not bother to wait for it.

import osos.spawnlp(os.P_NOWAIT, 'cp', 'cp', '/path/large-file.db', '/path/dest')