如何从python调用程序而不等待它返回

时间:2010-04-08 17:23:13

标签: python command subprocess popen

有没有办法从python调用程序而不等待它返回?我创建了一个脚本,将程序复制到目录并运行该程序。但是当我从python调用程序时,python脚本不会退出,直到我启动的程序退出。我试过os.system和Popen。还有另外一种方法吗?

添加信息: os.spawnl与os.P_DETACH仍然无法正常工作;根据文档,“P_DETACH类似于P_NOWAIT,但新进程与调用进程的控制台分离”。但它仍然以某种方式附加到我的调用进程(调用脚本将不会退出,直到任何被调用的可执行文件返回)

程序:

os.system("start test.exe")
print "Done"

执行test.exe后,会打印Done。但它不会终止脚本的执行(脚本进程仍在运行)。尝试用P_DETACH创建一个守护程序线程和Popen,仍然没有去。

3 个答案:

答案 0 :(得分:9)

我发布了一个解决方案,如何在previous question中分离流程。

答案 1 :(得分:3)

poll()上使用wait()代替Popen,它不会阻止,也不会等待程序运行。但是,我认为真正停止整个程序等待的唯一方法是创建一个启动进程的守护程序线程。这样你就永远不必等待它。

class MyThread(threading.Thread):
    def run(self):
        '''Start your thread here'''
        pass

thread = MyThread()
thread.daemon = True
thread.start()

答案 2 :(得分:2)

在Windows下,如果使用shell START命令调用程序,则应该能够“释放”父进程并允许它退出。在DOS提示符下尝试START /?以了解更多信息。