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')