2015-01-30 2 views
1

Я использую Python 3.4.2 для Windows. В script1.py я делаю это:Python subprocess.popen() без ожидания

myProc = subprocess.Popen([sys.executable, "script2.py", "argument"]) 
myProc.communicate() 

это работает и вызывает script2.py. Проблема в том, что в script2.py существует бесконечный цикл (должен быть), и script1.py ждет завершения скрипта2.py. Как я могу сказать script1.py просто вызвать script2.py и не дождаться завершения процесса?

+0

Помогает ли это? http://stackoverflow.com/questions/13243807/popen-waiting-for-child-process-even-when-the-immediate-child-has-terminated – nekomatic

+0

Несвязанный: в качестве более гибкой альтернативы вы можете импортировать скрипт как вместо этого используется модуль Python (используйте «if __name__ ==» __ main __ »« защищайте его, чтобы не запускать код при импорте »), и вызывайте функции напрямую или используя' threading', 'multiprocessing',' concurrent.futures', если это необходимо. – jfs

ответ

4

Просто не звоните myProc.communicate(), если вы не хотите ждать. subprocess.Popen начнет процесс.

+0

Я не могу в это поверить ... выслушайте глупый вопрос и спасибо за ответ. – jul

0

Вызвать сценарий в другом окне.

myProc = subprocess.Popen(["start", sys.executable, "script2.py", "argument"]) 
myProc.communicate() 

start является функцией оболочки окна, запускает программу по отдельности, что позволяет в настоящее время один, чтобы продолжить процесс. Я не тестировал это, так как у меня нет доступа к ОС Windows, но эквивалент Linux (nohup) работает по мере необходимости.

Если вам нужен точный контроль над тем, что происходит с script2.py, обратитесь к модулю multiprocessinghere.

Смежные вопросы