首页 > 解决方案 > pserve 在 VSCode python 调试器中启动后立即退出

问题描述

我有一个 python-2.7 env Pyramid 1.4 应用程序,我一直在 OS X 上开发(撰写本文时为 10.14.5)。激活环境后,我可以从命令行启动 pserve 并测试应用程序。我希望能够从 VSCode 中进行调试。我已经使用 Pyramid 设置配置了调试器launch.json

        {
            "name": "Python: Pyramid Application",
            "type": "python",
            "request": "launch",
            "args": [
                "${workspaceFolder}/development.ini"
            ],
            "pyramid": true,
            "jinja": true
        }

每当我从 VSCode (F5) 中启动调试器时,所有预期的命令都会运行并且它们看起来是合法的:

$ source /my/app/path/env/bin/activate
$ cd /my/app/path ; env PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 /my/app/path/env/bin/python /my/home/.vscode/extensions/ms-python.python-2019.4.12954/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 63836 /my/app/path/env/lib/python2.7/site-packages/pyramid-1.4-py2.7.egg/pyramid/scripts/pserve.py /my/app/path/development.ini 

没有错误,但启动器命令退出并且调试器永远不会激活。pserve没有在后台运行。调试工具栏短暂地出现在编辑器窗口的顶部,但不到一秒钟后就消失了(所以我想有一个简短的调试会话由于某种原因而结束)

我尝试在 development.ini 中更改选项以使用不同的金字塔服务器主服务器

[server:main]
; use = egg:waitress#main
use = egg:pyramid#wsgiref
host = 0.0.0.0
port = 6666

没有不同

VSCode python 页面上的信息很少。

我会很好地将代码添加到我需要调试的文件中(我的后备是pdb),但我很想利用 VSCode 中很棒的调试器。

请注意,如果我手动(而不是按 F5)输入

 cd /my/app/path ; env PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 /my/app/path/env/bin/python /my/home/.vscode/extensions/ms-python.python-2019.4.12954/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 63836 /my/app/path/env/lib/python2.7/site-packages/pyramid-1.4-py2.7.egg/pyramid/scripts/pserve.py /my/app/path/development.ini

在终端中 - 我socket.error: [Errno 61] Connection refused假设因为 VSCode 的调试器已经关闭。

如果我在同一个 VSCode 终端窗口中运行以下命令

/my/app/path/env/lib/python2.7/site-packages/pyramid-1.4-py2.7.egg/pyramid/scripts/pserve.py /my/app/path/development.ini

我的服务器启动正常并服务请求。所以它似乎与 ptvsd 启动器有关。

有任何想法吗?

标签: pythonpython-2.7visual-studio-codepyramid

解决方案


我想出的解决方案(可行)是将我的金字塔设置更改launch.json为如下所示:

        {
            "name": "Python: Pyramid Application",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/env/bin/pserve",
            "args": [
                "${workspaceFolder}/development.ini"
            ],
            // "pyramid": true
            // "jinja": true
            "debugOptions": [
                "RedirectOutput",
            ]        
        }

基本上我强制调试器通过手动设置启动 pserve。这行得通,我能够打断点并查看变量值。


推荐阅读