Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pserve在VSCode python调试器中启动后立即退出_Python_Python 2.7_Visual Studio Code_Pyramid - Fatal编程技术网

pserve在VSCode python调试器中启动后立即退出

pserve在VSCode python调试器中启动后立即退出,python,python-2.7,visual-studio-code,pyramid,Python,Python 2.7,Visual Studio Code,Pyramid,我有一个python-2.7 env Pyramid 1.4应用程序,我一直在OSX上开发(截至本文撰写时为10.14.5)。一旦env被激活,我就可以从命令行启动pserve并测试应用程序。我希望能够在VSCode中进行调试。我已经在launch.json中使用金字塔设置配置了调试器: { "name": "Python: Pyramid Application", "type": "python", "r

我有一个python-2.7 env Pyramid 1.4应用程序,我一直在OSX上开发(截至本文撰写时为10.14.5)。一旦env被激活,我就可以从命令行启动pserve并测试应用程序。我希望能够在VSCode中进行调试。我已经在
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 
没有错误,但launcher命令退出,调试器从未激活。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)输入

在终端中-我得到一个
socket.error:[Errno 61]连接被拒绝
,我想是因为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发射器有关


有什么想法吗?

我想出的解决方案(有效)是将
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。这是可行的,我可以点击断点并查看变量值。

写下这篇文章后,我立即意识到,我运行应用程序的方式与调试器启动应用程序的方式存在细微的差异。调试器开始直接使用
pserve.py
脚本,但我的应用程序运行的方式使用
pserve
,它本身就是一个python脚本,包装并配置
pserve.py
,因此问题与VSCode的调试器无关,而与调试器配置有关。我认为问题与以下方面有关:
        {
            "name": "Python: Pyramid Application",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/env/bin/pserve",
            "args": [
                "${workspaceFolder}/development.ini"
            ],
            // "pyramid": true
            // "jinja": true
            "debugOptions": [
                "RedirectOutput",
            ]        
        }