Я работаю над сценарием, который запускает ряд подпроцессов. Сценарий должен иметь возможность запускать их все, а затем проверять в цикле, выполнены ли они.
Не начинайте одну, подождите, пока она закончится, а затем начните следующую.
Например:
sp1 = subprocess.Popen(["sleep 60", shell=True)
sp2 = subprocess.Popen(["sleep 10", shell=True)
sp3 = subprocess.Popen(["sleep 80", shell=True)
sp1_done = False
sp2_done = False
sp3_done = False
while not sp1_done and not sp2_done and not sp3_done:
if sp1.returncode and not sp1_done:
print("sp1 done")
sp1_done = True
if sp2.returncode and not sp2_done:
print("sp2 done")
sp2_done = True
if sp3.returncode and not sp3_done:
print("sp3 done")
sp3_done = True
print("all done")
Я читал, что можно получить доступ к коду ошибки подпроцесса с помощью
sp1_data = sp1.communicate()[0]
и затем с
returncode = sp1.returncode
Но вот так скрипт ждет завершения sp1
.
Как я могу запустить несколько подпроцессов, не дожидаясь их завершения, а проверяя, завершены ли они (например, проверив код возврата)?
subprocess.Popen
оттуда. Кстати, хорошая картинка с амигой. - person Jean-François Fabre   schedule 15.12.2016