@pokstad: Да, Github - потрясающий соус, который делает код «реальным», социальным и легкодоступным в Интернете. Я стараюсь использовать это, когда это возможно.
аюсь определить, когда программа установки завершает выполнение из скрипта Python. В частности, это база данных Oracle 10gR2. В настоящее время я использую модуль подпроцесса с Popen. В идеале, я бы просто использовал метод wait (), чтобы дождаться завершения установки, однако документированная команда фактически порождает дочерние процессы для обработки фактической установки. Вот пример кода неисправного кода:
import subprocess
OUI_DATABASE_10GR2_SUBPROCESS = ['sudo',
'-u',
'oracle',
os.path.join(DATABASE_10GR2_TMP_PATH,
'database',
'runInstaller'),
'-ignoreSysPrereqs',
'-silent',
'-noconfig',
'-responseFile '+ORACLE_DATABASE_10GR2_SILENT_RESPONSE]
oracle_subprocess = subprocess.Popen(OUI_DATABASE_10GR2_SUBPROCESS)
oracle_subprocess.wait()
Здесь есть похожий вопрос:Уничтожение подпроцесса, включая его потомков, из python, но выбранный ответ не решает проблему детей, вместо этого он инструктирует пользователя напрямую вызывать приложение для ожидания. Я ищу конкретное решение, которое будет ждать всех детей подпроцесса. Что если существует неизвестное количество подпроцессов? Я выберу ответ, который решает проблему ожидания завершения всех дочерних подпроцессов.
Больше ясности при сбое: дочерние процессы продолжают выполняться после команды wait (), поскольку эта команда ожидает только процесс верхнего уровня (в данном случае это sudo). Вот простая диаграмма известных дочерних процессов в этой задаче: Модуль подпроцесса Python -> Sudo -> runInstaller -> java -> (неизвестно)