【发布时间】:2014-11-28 09:52:58
【问题描述】:
我在一个应该引发异常的子进程中执行代码。
我想在子进程返回异常时在主进程中引发相同的异常(最好在保留堆栈跟踪的同时),但我不知道该怎么做。
我很好地从子进程中捕获了标准错误,但我找不到如何解析它,所以我得到了异常的类型。我将如何做到这一点?
我正在使用 python 2.7
主要方法
import subprocess
example=subprocess.Popen(["python","example.py"],
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
return_obj, return_error = example.communicate()
if return_error:
# replace with error from subprocess
print "Should raise ",NameError('HiThere')
raise TypeError('Wrong type')
子进程
raise NameError('HiThere')
【问题讨论】:
-
如果不重新解析异常并抛出新异常,我认为您无法获得信息
-
您应该考虑
importing 而不是运行另一个解释器。请注意,如果您这样做,您仍然可以在单独的进程中运行example.py中的任何函数。 -
if return_error: raise Exception, return_error -
您可能希望
execfile()在同一进程中运行 example.py 脚本,以便轻松将异常作为对象获取。
标签: python python-2.7 exception subprocess