как вызвать программу из python, не дожидаясь ее возврата - PullRequest
20 голосов
/ 08 апреля 2010

есть ли способ вызвать программу из python, не дожидаясь ее возврата? Я создал скрипт, который копирует программу в каталог и запускает эту программу. но когда я вызываю программу из python, скрипт python не завершается, пока не завершится запущенная программа. Я пробовал os.system и Popen. Есть ли другой способ сделать это?

Добавлена ​​информация: os.spawnl с os.P_DETACH по-прежнему не работает; согласно документам, «P_DETACH похож на P_NOWAIT, но новый процесс отсоединен от консоли вызывающего процесса». но он все равно каким-то образом привязан к моему вызывающему процессу (вызывающий скрипт не завершит работу, пока не будет возвращен какой-либо из вызываемых исполняемых файлов)

Программа:

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

после выполнения test.exe он печатает Готово. но это не прекращает выполнение скрипта (процесс скрипта все еще выполняется). попытался создать поток демона и всплыть с P_DETACH, но по-прежнему не ходил.

Ответы [ 3 ]

9 голосов
/ 08 апреля 2010

Я опубликовал решение о том, как отсоединить процесс в предыдущем вопросе .

4 голосов
/ 08 апреля 2010

При использовании poll() вместо wait() на Popen оно не будет блокироваться и не будет ждать запуска программы. Однако я думаю, что единственный способ действительно остановить ожидание всей программы - это создать демонический поток, который запускает процесс. Таким образом, вам никогда не придется ждать этого.

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

thread = MyThread()
thread.daemon = True
thread.start()
2 голосов
/ 08 апреля 2010

В Windows, если вы вызываете программу с помощью команды оболочки START, вы должны иметь возможность «освободить» родительский процесс и позволить ему завершиться. Попробуйте START /? в командной строке DOS, чтобы узнать больше.

...