Я запускаю программу test.py
. Поскольку он часто рушится, я импортирую subprocess
, чтобы перезагрузить его, когда он остановится. Иногда я обнаружил, что подпроцесс не может его успешно перезапустить. Следовательно, я заставляю программу перезапускать каждые 60 минут. Но я обнаружил, что иногда две тестовые обработки работают симулятивно. Что случилось с моим кодом и как его исправить? Я использую ОС Windows 7. Plz проверить следующие коды и спасибо заранее:Почему подпроцесс не может успешно убить старый запущенный процесс?
import subprocess
import time
from datetime import datetime
p = subprocess.Popen(['python.exe', r'D:\test.py'], shell=True)
minutes = 1
total_time = 0
while True:
now = datetime.now()
#periodly restart
total_time += 1
if total_time % 100 == 0:
try:
p.kill()
except Exception as e:
terminated = True
finally:
p = subprocess.Popen(['python.exe', r'D:\test.py'], shell=True)
#check and restart if it stops
try:
terminated = p.poll()
except Exception as e:
terminated = True
if terminated:
p = subprocess.Popen(['python.exe', r'D:\test.py'], shell=True)
time.sleep(minutes * 60)
drop 'shell = True' - он создает ненужный здесь процесс' cmd.exe' ('p.kill()' убивает этот процесс). – jfs
related: [subprocess не может успешно перезапустить целевой файл python] (http://stackoverflow.com/q/28302081/4279) – jfs