Скрипт Kill Python, запускаемый подпроцессом, вызываемым другим скриптом (Windows) - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь интегрировать python-скрипт ESA'2 sen2cor в мой рабочий процесс. Для этого я создаю подпроцесс, с помощью которого я вызываю файл «L2A_Process.bat», который, в свою очередь, вызывает скрипт «L2A_Process.py». Я хочу запустить sen2cor-скрипт с тайм-аутом, так как он застревает и время от времени зависает, чтобы автоматически перезапустить его в случае сбоя. Чтобы запустить его и поймать таймаут, я успешно использовал следующий скрипт:

import os, subprocess
from signal import CTRL_BREAK_EVENT

timeout = 3600 #1hour
l1c_safe_path = "path/to/my/input/file.SAFE" #product that I want to process
command = ["L2A_process.bat", l1c_safe_path]
p = subprocess.Popen(command,shell=False, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
try:    
    p.wait(timeout)
except subprocess.TimeoutExpired:    
    os.kill(p.pid, CTRL_BREAK_EVENT) 

Это насколько я понял. В результате сценарий sen2cor приостанавливается и выдает следующий вывод:

Terminate batch job (Y/N)

Я хотел бы знать, как правильно завершить мой подпроцесс "p" со всеми его дочерними подпроцессами (т. Е. "L2A_Process".py ").

Некоторые наблюдения:

  • Этот сценарий должен работать в Windows;

  • Я пробовалубить подпроцесс без флага создания, который я использовал в приведенном выше примере: это приводит к уничтожению подпроцесса, но скрипт «L2A_Process.py» обнаруживает, что он продолжает работать (что является ядром моей проблемы);

  • Я не могу использовать CTRL_C_EVENT, поскольку хочу перезапустить сбойный «L2A_Process.py» в цикле, пока он не завершится успешно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...