【问题标题】:Pdb error while debugging python app with serverless launched offline使用无服务器离线启动调试 python 应用程序时出现 Pdb 错误
【发布时间】:2019-02-21 10:53:28
【问题描述】:

我在调试视图函数时遇到问题 import pdb; pdb.set_trace() 放置在其中,无服务器启动为 > sls offline start 在控制台中。 即,发出相应的 GET 请求,我收到以下错误:

Python: > /.../handler.py(88)get_results()
-> request_params = event.query_params


Python: (Pdb)


Python: 2019-02-20 18:37:43,648 [ERROR] | ...
Traceback (most recent call last):
  ...
  File ".../handler.py", line 88, in get_results
  ...
  File "/usr/lib/python3.6/bdb.py", line 51, in trace_dispatch
    return self.dispatch_line(frame)
  File "/usr/lib/python3.6/bdb.py", line 70, in dispatch_line
    if self.quitting: raise BdbQuit
bdb.BdbQuit

Google 认为问题在于无服务器进程无法从标准输入中读取,但我不知道如何处理此问题。

有什么建议吗?

【问题讨论】:

  • 我通常在 REPL 会话中导入处理程序并以这种方式执行函数。你试过类似的东西吗?
  • 对不起,我没听懂。我运行sls offline star。 handler.py 由 sls 调用。你如何导入处理程序?你能给我一个提示吗?
  • cd 到您拥有handler.py 的目录,运行python 以启动交互式REPL 会话,执行import handler 然后执行handler.get_results() 或您需要的任何功能。 HTH
  • 这并不总是一个好主意,因为get_result(event, context) 函数依赖于两个变量,我们应该传递一些值。从实际的 http 请求中获取这些值而不是发明一些东西会很方便。此外,我还有更复杂的情况,函数get_result 被装饰器包装,我的函数的实际参数被转换为一些类实例。所以,你的方法不符合我的需要。

标签: python debugging pdb serverless


【解决方案1】:

我在这里找到了解决方案https://stackoverflow.com/a/26975795/4388451:

  1. 创建两个fifo:

    mkfifo fifo_stdin mkfifo fifo_stdout

在一个终端中

  1. 在同一终端在后台打开stdout,并写入stdin:

    cat fifo_stdout & cat > fifo_stdin

  2. 在python代码中创建pdb对象,并使用它:

    导入 pdb mypdb = pdb.Pdb(stdin=open('fifo_stdin', 'r'), stdout=open('fifo_stdout', 'w')) …… mypdb.set_trace()

  3. 在另一个终端中从放置fifos的文件夹中运行python代码(或将fifos放在带有python代码的文件夹中的第一步)

现在我可以在第一个控制台中使用pdb!

PS 在调试时使用--noTimeout 选项很有用:sls offline --noTimeout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2015-10-02
    相关资源
    最近更新 更多