运行流程,别等


问题内容

我想运行一个进程,而不是等待它返回。我试过使用P_NOWAIT和这样的子进程生成:

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

但是,控制台窗口将保持不变,直到我关闭记事本。是否可以启动该过程而不等待它完成?


问题答案:

此调用不等待子进程终止(在Linux上)。不要问我怎么close_fds做。我几年前写了代码。(顺便说一句: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使子进程无法访问父进程的文件句柄。