@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 -> (неизвестно)

Ответы на вопрос(4)

Ваш ответ на вопрос