我在应该引发异常的子流程中执行代码。
当子进程返回异常时(最好在保留堆栈跟踪的同时),我想在主进程中引发相同的异常,但是我不确定如何执行此操作。
我很好地从子进程中捕获了stderr,但是我找不到如何解析它的方法,所以我得到了异常的类型。我将如何完成?
我正在使用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')
最佳答案
如果您只想在单独的进程中运行python代码,则可能不应该使用subprocess
。正如Serge Ballesta所说,subprocess
的目的是在操作系统级别上运行另一个程序,而无需特别关心它的内容-没有什么可以帮助您正确处理python解释器过程的复杂性的。
为此,最好是简单地对代码进行 import
并使用 multiprocessing
,它公开了一个高级界面来帮助您在多个进程中运行python代码。
假设您在main
上具有定义明确的example.py
函数:
from examply import main as example_main
import multiprocessing
pool= multiprocessing.Pool(1)
pool.apply( example_main )
使用此代码,异常和返回值都将透明地提供给您的主进程。
如果不想阻塞等待结果,也可以使用
Pool.apply_async
。关于python - 从子流程中引发异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26177249/