我知道在异常提升时可以在werkzeug中生成交互式控制台。这产生了一个带有堆栈跟踪的交互式控制台,这正是我所需要的。问题的环境是我希望能够在SIGUSR2信号时产生交互式控制台来调试可能导致我们的大量qa代码在执行期间挂起的原因。
对于较小的项目,将引发的异常传播到顶层并处理其中的webservice的启动可能就足够了,只需在其中一条路由中重新引用相同的错误,即可通过堆栈跟踪启动交互式控制台。
然而,这对我来说不是一个选项,所以我的问题是:无论如何都要向StackgedApplication提供堆栈框架或从堆栈框架构造一个Exception(不会丢失上下文和堆栈跟踪?
到目前为止,我已经摆弄 1 :
def handler(signum, frame):
app = DebuggedApplication(application, evalex=True)
run_simple('', 9998, app, use_debugger=True)
2 : @ Request.application def申请(请求): 提高
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 是不可能的,因为我无法将异常渗透到最高级别(没有重大的重构),并且我不想在多个地方处理此问题。有什么想法吗?
由于