Я запускаю программу Python из другой программы Python через подпроцесс, я называю это так.
try:
subproc = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE,
shell=True)
o, e = subproc.communicate()
sys.stdout.write(o)
sys.stderr.write(e)
except:
subproc.terminate()
В вызываемой программе я зарегистрировал обработчики сигналов, как показано ниже. Тем не менее, это никогда не вызывается по исключению в вышеуказанной программе, несмотря на вызов функции завершения. Но если я запускаю дочернюю программу отдельно, функция handle_exit
вызывается нормально. Какую ошибку я здесь делаю?
def handle_exit(sig, frame):
print('\nClean up code here)
....
signal.signal(signal.SIGTERM, handle_exit)
signal.signal(signal.SIGINT, handle_exit)
UPDATE:
Хорошо, я заработал, заменив subproc.terminate
на следующее.
subproc.send_signal(signal.SIGINT)
subproc.wait()
Это хорошо, но я бы также хотел получить выходные данные дочернего процесса при исключении. Как я могу получить это?