【发布时间】:2016-11-20 21:22:57
【问题描述】:
我想访问在子进程中运行的 python 程序的回溯。
在新程序开始执行之前,子进程中引发的异常将在父进程中重新引发。此外,异常对象还有一个名为 child_traceback 的额外属性,它是一个字符串,包含从孩子的角度来看的回溯信息。
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'
如何在不修改子进程程序代码的情况下访问子进程的traceback?这意味着,我想避免在我的整个子程序代码周围添加一个大的 try/except 子句,而是从我的主程序处理错误日志记录。
编辑: sys.executable 应该可以替换为不同于运行主程序的解释器。
【问题讨论】:
-
文档说“在新程序开始执行之前”,在您的情况下,在执行新程序时引发了异常,因此没有
child_traceback。新程序运行后,您需要捕获CalledProcessError异常并执行以下操作:stackoverflow.com/questions/24849998/… usingCalledProcessError.output -
在我的例子中,
CalledProcessError.output只捕获标准输出,但没有捕获异常的回溯。 -
这可能是因为输出是在
stderr上发送的。查看我通过上面的链接发送给您的问题的答案,了解更多详情
标签: python subprocess traceback