Bom*_*maz 5 python subprocess exception python-2.7
我在一个应该引发异常的子进程中执行代码.
当从子进程返回异常时(我最好在保留堆栈跟踪的同时),我想在主进程中引发相同的异常,但我不知道如何做到这一点.
我从子进程捕获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')
Run Code Online (Sandbox Code Playgroud)
子
raise NameError('HiThere')
Run Code Online (Sandbox Code Playgroud)
如果您想要的只是在单独的进程中运行 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 )
Run Code Online (Sandbox Code Playgroud)
使用此代码,异常和返回值都将透明地提供给您的主进程。
Pool.apply_async如果您不想阻塞等待结果,也可以使用, 。