我在Ubuntu 14.04上使用Python 3.4编写了一个GUnicorn / Falcon Web服务。我想使用VSCode调试器来调试此服务。我目前使用命令
启动该过程/usr/local/bin/gunicorn --config /webapps/connects/routerservice_config.py routerservice:api
使用配置文件routerservice_config.py启动routerervice.py。我在配置中将worker设置为1以保持简单。
我已经将Python扩展安装到VSCode,所以我有Python调试工具。那么我如何附加到GUnicorn工作进程或让VSCode运行启动命令并自动附加。
谢谢, 格雷格
答案 0 :(得分:6)
此launch.json
设置在VScode 1.43上对我有用:
{
"name": "Python: Webapp",
"type": "python",
"request": "launch",
"program": "/home/me/.virtualenvs/my-venv/bin/gunicorn",
"gevent": true,
"args": ["main:app", "--bind=127.0.0.1:8080", "--reload", "--worker-class", "eventlet", "-w", "1", "--timeout=7200"],
"postDebugTask": "killdebugger"
}
使用此设置,我必须在停止调试器后创建一个杀死python进程的任务。这仅仅是因为按下停止按钮会关闭调试器,但是Python进程将继续运行。如果您面临相同的情况,请按F1创建任务,搜索任务,然后单击“配置任务”。然后将以下命令添加到您的task.json中:
{
"label": "killdebugger",
"type": "shell",
"command": "lsof -t -i tcp:8080 | xargs kill -9"
}
如果您没有launch.json中的ki "postDebugTask": "killdebugger"
设置问题
答案 1 :(得分:2)
我是扩展程序的作者。 您可以尝试以下方法: https://github.com/DonJayamanne/pythonVSCode/wiki/Debugging:-Remote-Debuging
import ptvsd
ptvsd.enable_attach("my_secret", address = ('0.0.0.0', 3000))
供参考:
- 这要求您包含ptvsd软件包并在您的应用程序中进行配置
- 计划是添加功能,以便将调试器连接到将来的任何python进程(希望不久的将来)。
答案 2 :(得分:0)
我遇到了同样的问题,并按照此处描述的已接受答案解决了这个问题:Is it possible to run Falcon app from Python?
当 gunicorn 分叉你的进程时,用 VScode 调试器拦截它并不是那么简单。最简单的方法是直接用 python 调用你的 API
from wsgiref import simple_server
import os
import falcon
app = falcon.API()
if __name__ == '__main__':
with simple_server.make_server('', int(os.getenv('PORT', 5000)), app) as httpd:
httpd.serve_forever()