Я хочу получить доступ к трассировке программы python, запущенной в подпроцессе.subprocess child traceback
The documentation говорит:
Exceptions raised in the child process, before the new program has started to execute, will be re-raised in the parent. Additionally, the exception object will have one extra attribute called child_traceback, which is a string containing traceback information from the child’s point of view.
Содержание my_sub_program.py
:
raise Exception("I am raised!")
Содержание из my_main_program.py
:
import sys
import subprocess
try:
subprocess.check_output([sys.executable, "my_sub_program.py"])
except Exception as e:
print e.child_traceback
Если я бегу my_main_program.py
, я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "my_main_program.py", line 6, in <module>
print e.child_traceback
AttributeError: 'CalledProcessError' object has no attribute 'child_traceback'
Как получить доступ к трассировке подпроцесса без изменения кода программы подпроцесса? Это означает, что я хочу избежать добавления большого предложения try/except
вокруг всего моего подпрограммного кода, но, скорее, обработать регистрацию ошибок из моей основной программы.
Редактировать:sys.executable
следует заменить на переводчик, отличный от того, на котором работает основная программа.
Doc говорит «перед тем, как новая программа запустилась», в вашем случае исключение было поднято во время выполнения новой программы, поэтому нет «child_traceback». После запуска новой программы вам нужно поймать исключение «CalledProcessError» и выполнить следующие действия: http://stackoverflow.com/questions/24849998/how-to-catch-exception-output-from-python-subprocess-check -output с использованием 'CalledProcessError.output' – mguijarr
В моем примере' CalledProcessError.output' выполнил только стандартный вывод, но не отслеживал исключение. – schreon
Это, вероятно, потому, что вывод отправляется на 'stderr'. Посмотрите ответы на вопрос, который я выслал вам по ссылке выше, для получения более подробной информации. – mguijarr