Ответ 1
Я опубликовал решение о том, как отсоединить процесс в предыдущем вопросе.
Есть ли способ вызвать программу из python, не дожидаясь ее возвращения? Я создал script, который копирует программу в каталог и запускает эту программу. но когда я вызываю программу из python, python script не выходит до выхода программы, которую я запускал. Я попробовал os.system и Popen. есть ли другой способ сделать это?
Добавлена информация: os.spawnl с os.P_DETACH все еще не работает; согласно документам, "P_DETACH похож на P_NOWAIT, но новый процесс отсоединяется от консоли вызывающего процесса". но он все еще каким-то образом привязан к моему процессу вызова (вызов script не будет прекращен до тех пор, пока не будет возвращен любой из вызванных исполняемых файлов)
Программа:
os.system("start test.exe")
print "Done"
после выполнения test.exe, он печатает Done. но это не завершает выполнение script (script процесс все еще запущен). попробовал создать поток демона, а Popen с P_DETACH, все равно не пошел.
Я опубликовал решение о том, как отсоединить процесс в предыдущем вопросе.
Используя poll()
вместо wait()
на Popen
, он не будет блокироваться и не будет ждать запуска программы. Тем не менее, я думаю, что единственным способом действительно остановить всю программу от ожидания является создание демона, который запускает процесс. Таким образом вам никогда не придется ждать.
class MyThread(threading.Thread):
def run(self):
'''Start your thread here'''
pass
thread = MyThread()
thread.daemon = True
thread.start()
В Windows, если вы вызываете программу с помощью команды shell START
, вы должны иметь возможность "освободить" родительский процесс и разрешить ему выйти. Попробуйте START /?
в командной строке DOS, чтобы узнать больше.