首页 > 解决方案 > 使用无服务器离线启动调试 python 应用程序时出现 Pdb 错误

问题描述

我在调试视图函数时遇到问题, 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

谷歌建议问题在于无服务器进程无法从标准输入读取,但我不知道如何处理这个问题。

有什么建议么?

标签: pythondebuggingpdbserverless

解决方案


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

  1. 创建两个fifo:

    mkfifo fifo_stdin mkfifo fifo_stdout

在一个终端

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

    猫 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在第一个控制台中使用了!

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


推荐阅读