我知道有可能在异常引发时在 werkzeug 中生成一个交互式控制台。这会产生一个带有堆栈跟踪的交互式控制台,这正是我所需要的。问题的环境是我希望能够根据 SIGUSR2 信号生成交互式控制台以调试可能导致我们大量 qa 代码在执行期间挂起的原因。
对于较小的项目,让引发的异常传播到顶层并在那里处理 Web 服务的启动并简单地在其中一个路由中重新引发相同的错误以使用堆栈跟踪启动交互式控制台就足够了。
但是,这对我来说不是一个选择,所以我的问题是:无论如何要向 DebuggedApplication 提供堆栈框架或从堆栈框架构造一个异常(不丢失上下文和堆栈跟踪?
到目前为止,我已经摆弄了1:
def handler(signum, frame):
app = DebuggedApplication(application, evalex=True)
run_simple('', 9998, app, use_debugger=True)
和2:@Request.application def application(request): raise
def handler(signum, frame):
raise Exception('user requested interactive console')
def main():
try:
signal.signal(signal.SIGUSR2, handler)
... some code kicking of tests ...
except:
run_simple('', 9998, application, use_debugger=True)
1仅在 localhost:9998/console 上启动交互式 shell(相当于在终端中仅键入 python)。并且2是不可能的,因为我无法让异常一直渗透到顶层(没有重大重构),而且我不想在多个地方处理这个问题。有任何想法吗?
谢谢