Запустите ярлык под окнами - PullRequest
1 голос
/ 08 декабря 2008

Следующее не работает, потому что не ожидает завершения процесса:

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

Есть идеи, как запустить ярлык и дождаться возвращения подпроцесса?

Редактировать: Первоначально я пытался это сделать без опции shell в моем сообщении, что привело к сбою Popen. По сути, start - это не исполняемый файл, а команда оболочки. Это было исправлено благодаря Джиму.

Ответы [ 3 ]

4 голосов
/ 08 декабря 2008

Вам нужно будет вызвать оболочку, чтобы заставить работать подпроцесс:

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

Это, однако, все равно будет немедленно завершено (см. @R. Bemrose).

Если p.pid содержит правильный pid (я не уверен в Windows), то вы можете использовать os.waitpid(), чтобы дождаться завершения программы. В противном случае вам может потребоваться использовать магию win32 com.

3 голосов
/ 08 декабря 2008

cmd.exe завершается, как только запуск запускает программу. Это поведение задокументировано (в начале /?):

Если включены расширения команд, внешний вызов команды через командная строка или команда СТАРТ изменяется следующим образом:

...

При выполнении приложения, которое 32-битное приложение с графическим интерфейсом, CMD.EXE не ожидает завершения приложения, прежде чем вернуться в командная строка Это новое поведение не происходит при выполнении внутри командного сценария.

Как на это влияет флаг / wait, я не уверен.

0 голосов
/ 08 декабря 2008

Примечание: я просто добавляю к ответу Джима небольшую хитрость. Как насчет использования опции WAIT для запуска?

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

Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...