Python: Como determinar que os filhos do subprocesso terminaram a execução

Estou tentando detectar quando um programa de instalação termina a execução de um script Python. Especificamente, o aplicativo é o banco de dados Oracle 10gR2. Atualmente, estou usando o módulo subprocesso com o Popen. Idealmente, eu simplesmente usaria o método wait () para aguardar a conclusão da instalação; no entanto, o comando documentado gera processos filho para lidar com a instalação real. Aqui está um código de exemplo do código com falha:

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()

Existe uma pergunta semelhante aqui: Matar um subprocesso incluindo seus filhos de python, mas a resposta selecionada não resolve o problema dos filhos, mas instrui o usuário a ligar diretamente para o aplicativo a aguardar. Estou procurando uma solução específica que aguarde todos os filhos do subprocesso. E se houver um número desconhecido de subprocessos? Selecionarei a resposta que aborda a questão de aguardar a conclusão de todos os subprocessos filhos.

Mais clareza na falha: os processos filhos continuam executando após o comando wait (), pois esse comando aguarda apenas o processo de nível superior (nesse caso, é 'sudo'). Aqui está um diagrama simples dos processos filhos conhecidos neste problema: Módulo de subprocesso Python -> Sudo -> runInstaller -> java -> (desconhecido)

questionAnswers(4)

yourAnswerToTheQuestion