以下方法不起作用,因为它不会等到该过程结束:
import subprocess
p = subprocess.Popen('start /WAIT /B MOZILL~1.LNK', shell=True)
p.wait()
知道如何运行快捷方式并等待子进程返回吗?
编辑:我原本是在帖子中没有 shell 选项的情况下尝试此操作,导致Popen失败。实际上,start
不是可执行文件,而是shell命令。由于吉姆,这一点得到了解决。
答案 0 :(得分:4)
您需要调用shell以使子进程选项起作用:
p = subprocess.Popen('start /B MOZILL~1.LNK', shell=True)
p.wait()
然而,这仍然会立即退出(见@R.Bemrose)。
如果p.pid
包含正确的pid(我在Windows上不确定),那么您可以使用os.waitpid()
等待程序退出。否则你可能需要使用一些win32 com magic。
答案 1 :(得分:3)
cmd.exe在启动程序后立即终止。记录此行为(在start /?中):
如果启用了命令扩展, 外部命令调用 命令行或START命令 变化如下:
...
执行应用程序时 一个32位的GUI应用程序,CMD.EXE 在返回之前不会等待应用程序终止 命令提示符。如果执行,则不会发生此新行为 在命令脚本中。
这是如何受/ wait标志的影响,我不确定。
答案 2 :(得分:0)
注意:我只是添加了Jim的回复,只是一个小技巧。 那么使用'WAIT'选项开始呢?
p = subprocess.Popen('start /B MOZILL~1.LNK /WAIT', shell=True)
p.wait()
这应该有用。