Я ищу безопасный способ перезапустить мою программу на Python, которая может восстановить контроль над дочерним процессом, запущенным перед перезапуском.
Я использую подпроцесс с потоком для мониторинга stdout
/stderr
длительного запуска command
, который будет постоянно генерировать какое-то выходное сообщение.
Пример фрагмента кода выглядит следующим образом:
class PS(threading.Thread):
def __init__(self, command):
threading.Thread.__init__(self)
self.command = command
def run(self):
try:
process = subprocess.Popen(self.command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(process.stdout.readline, ''):
''' do something to line'''
Когда моя основная программа Python завершается (например, убивает ее pid), ее дочерний процесс (command
, выполняемый классом PS
) все еще жив как фоновый процесс.
Мой вопрос: есть ли способ в python «повторно подключить» дочерний процесс, чтобы я мог продолжать отслеживать его stdout
/stderr
?
P.S. Мне это нужно только в среде Linux, точнее в Ubuntu 14.04.
"while :; do echo $i; i=$((i+1)); sleep 1; done"
), и этот дочерний процесс не пережил завершение родительского процесса Python. - person chepner   schedule 18.08.2014import subprocess; subprocess.Popen(['python', '-c', 'while True: print("test")'])
действительно переживает завершение родительского процесса python. - person simonzack   schedule 18.08.2014stdout=subprocess.PIPE
его стандартный вывод просто наследуется от родителя, а не устанавливается в канал, другая конечная точка которого исчезает при выходе родителя. - person chepner   schedule 18.08.2014command
, который я запускаю, на самом деле является процессом QEMU, который запускает виртуальную машину. Я заметил, что виртуальная машина жива после завершения кода Python. В любом случае, как вы предложили, просто записать в файл кажется многообещающим решением. - person user1817188   schedule 18.08.2014