在Windows下运行快捷方式

时间:2008-12-08 14:09:25

标签: python windows

以下方法不起作用,因为它不会等到该过程结束:

import subprocess
p = subprocess.Popen('start /WAIT /B MOZILL~1.LNK', shell=True)
p.wait()

知道如何运行快捷方式并等待子进程返回吗?

编辑:我原本是在帖子中没有 shell 选项的情况下尝试此操作,导致Popen失败。实际上,start不是可执行文件,而是shell命令。由于吉姆,这一点得到了解决。

3 个答案:

答案 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()

这应该有用。