2013-06-07 4 views
3

есть способ вызвать внешнюю программу внутри python и не дождаться завершения ее выполнения?python call external program non-blocking way

Я попытался это, но не повезло:

os.system("external_program &") 

Обычно, если я называю external_program & внутри оболочки Bash он выполняется как фоновый процесс. Как я могу сделать это внутри python? Ибо, мой специальный случай, создающий другой поток, не работает. После выполнения основного скрипта python внешняя программа должна продолжить выполнение.

ответ

4

Да, используйте subprocess module. Например:

p = subprocess.Popen(['external_program', 'arg1', 'arg2']) 
# Process is now running in the background, do other stuff... 
... 
# Check if process has completed 
if p.poll() is not None: 
    ... 
... 
# Wait for process to complete 
p.wait() 
+0

Я пробовал это. Он все еще блокирует. И если это сработает, что произойдет, если я не буду ждать в конце? Это будет убито? –

+0

Я понял, что он работает, но главный сценарий ждет в конце. Мне нужна полная независимость от основного сценария. Является ли это возможным? –

+0

@GokhanKa: Если вы не хотите, чтобы главный скрипт подождал, тогда не вызывайте 'wait()', это так просто. Если вы выйдете, пока подпроцесс все еще запущен, он будет продолжать работать в фоновом режиме. –

0

Забудьте о os.system(). Он устарел в пользу subprocess module.

Он обеспечивает способ выполнения подпрограмм практически для каждого мыслимого варианта использования.