Python: ожидание завершения запущенного внешнего процесса - PullRequest
18 голосов
/ 21 января 2012

Вопрос уже в заголовке - как заставить скрипт python подождать, пока какой-нибудь процесс, запущенный с вызовом os.system (), не будет завершен?Например, код типа

    for i in range( 0, n ):
       os.system( 'someprog.exe %d' % i )

Это запускает запрошенный процесс одновременно n раз, что может заставить мой компьютер немного потеть)

Спасибо за любой совет.

Ответы [ 2 ]

18 голосов
/ 21 января 2012

Используйте subprocess вместо:

import subprocess
for i in xrange(n):
  p = subprocess.Popen(('someprog.exe', str(i))
  p.wait()

Подробнее здесь: http://docs.python.org/library/subprocess.html

17 голосов
/ 22 января 2012

os.system () не ожидает завершения своего процесса перед возвратом.

Если вы видите, что он не ждет, запускаемый вами процесс, вероятно, отсоединяется для запускафон, в этом случае пример подпроцесса. Открытие + ожидание, которое дал Дор, не поможет.

Примечание: если вам нужен только подпроцесс. Открытие + ожидание, используйте subprocess.call:

import subprocess
subprocess.call(('someprog.exe', str(i)))

Это на самом деле ничем не отличается от os.system (), кроме явной передачи команды и аргументов вместо передачи ее в виде одной строки.

...