我正在使用 subprocess.Popen 启动带参数的外部程序,但是当我打开它时,脚本挂起,等待程序完成,如果我关闭脚本,程序会立即退出。
我以为我之前只是在使用类似的过程而没有问题,所以我不确定我是否真的做错了或者我记错了 Popen 可以做什么。这就是我调用命令的方式:
subprocess.Popen(["rv", rvFile, '-nc'])
raw_input("= Opened file")
raw_input 部分只是为了让用户有机会看到消息并知道现在应该打开文件。但我最终得到的是进程本身吐出的所有信息,就好像它是直接在命令行中调用的一样。我的理解是 Popen 使它成为一个独立的子进程,这将允许我关闭脚本并让另一个进程保持打开状态。
链接的重复问题确实对我的目的有一个有用的答案,尽管它仍然没有按我想要的那样工作。
This is the answer.这就是我更改代码的方式:
DETACHED_PROCESS = 0x00000008
pid = subprocess.Popen(["rv", rvFile, '-nc'], creationflags=DETACHED_PROCESS).pid
raw_input("= Opened file")
它在 IDLE 下工作,但在我通过命令提示符样式界面运行 py 文件时不起作用。它仍然绑定(bind)到那个窗口,打印输出并在我运行脚本后立即退出程序。
最佳答案
stackoverflow 问题 Calling an external command in python有很多有用的相关答案。
看看os.spawnl
,它可以采用多种模式标志,包括 NOWAIT、WAIT。
import os
os.spawnl(os.P_NOWAIT, 'some command')
NOWAIT 选项将返回生成任务的进程 ID。
关于python - 启动另一个程序并在脚本结束时保持运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30051788/