运行过程,不要等待

我想运行一个进程,而不是等待它返回。 我已经尝试与P_NOWAIT和subprocess像这样产卵:

app = "C:\Windows\Notepad.exe" file = "C:\Path\To\File.txt" pid = subprocess.Popen([app, file], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE).pid 

但是,控制台窗口仍然保留,直到我closures记事本。 是否有可能启动该stream程,而不是等待它完成?

这个调用不等待子进程终止(在Linux上)。 不要问我什么close_fds ; 我几年前就写了这个代码。 (顺便说一下: subprocess.Popen进程的文档subprocess.Popen令人困惑,恕我直言。)

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

编辑:

我看了子进程的文档,我相信对你来说重要的是stdin=None, stdout=None, stderr=None, 否则, Popen会捕获程序的输出结果,你需要看看它。 close_fds使得父进程的文件句柄对于孩子是不可访问的。

我终于得到这个工作。 我正在运行“Python 2.6.6(r266:84297,2010年8月24日,18:13:38)[MSC v.1500 64位(AMD64)] win32”。 以下是我必须编写的代码:

 from subprocess import Popen DETACHED_PROCESS = 0x00000008 cmd = [ 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) 

这将关闭标准输入/输出的所有管道,并且不执行shell中的调用程序。 将'creationflags'设置为DETACHED_PROCESS似乎对我有用。 我忘记了我在哪里发现的,但在这里使用了一个例子。

我认为实现这个简单的方法是使用传递P_NOWAIT标志的os.spawn *系列函数。

这个例子会产生一个cp进程来把大文件复制到一个新的目录,而不用等待它。

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