在脱机启动无服务器的情况下调试python应用程序时发生Pdb错误

在脱机启动无服务器的情况下调试python应用程序时发生Pdb错误,python,debugging,pdb,serverless,Python,Debugging,Pdb,Serverless,我在调试视图函数时遇到问题 导入pdb;pdb.set_trace() 放置在其中,无服务器作为 >sls离线启动 在控制台中。 即,发出相应的GET请求时,我收到以下错误: Python: > /.../handler.py(88)get_results() -> request_params = event.query_params Python: (Pdb) Python: 2019-02-20 18:37:43,648 [ERROR] | ... Traceback

我在调试视图函数时遇到问题
导入pdb;pdb.set_trace()
放置在其中,无服务器作为
>sls离线启动
在控制台中。 即,发出相应的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
谷歌认为问题在于无服务器进程无法读取stdin,但我不知道如何处理这个问题

有什么建议吗?

我在这里找到了一个解决方案:

  • 创建两个先进先出:

    mkfifo fifo_stdin mkfifo fifo\u stdout

  • 在一个终端

  • 在同一终端中,在后台打开
    stdout
    ,然后写入
    stdin

    cat fifo标准(&cat>fifo标准)

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

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

  • 从另一个终端中放置FIFO的文件夹运行python代码(或将FIFO与python代码一起放在文件夹的第一步)

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

    PS
    调试时使用
    --noTimeout
    选项非常有用:
    sls offline--noTimeout

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