【发布时间】:2020-07-09 22:08:54
【问题描述】:
我想调试一个 Python 模块,我必须像这样执行:
python -m ModuleA.ModuleB <someargs>
如何在 VS Ccode 的 launch.json 上配置 -m 开关? args 部分是针对正在执行的脚本,而不是针对 python 二进制文件本身。
【问题讨论】:
标签: python visual-studio-code vscode-debugger
我想调试一个 Python 模块,我必须像这样执行:
python -m ModuleA.ModuleB <someargs>
如何在 VS Ccode 的 launch.json 上配置 -m 开关? args 部分是针对正在执行的脚本,而不是针对 python 二进制文件本身。
【问题讨论】:
标签: python visual-studio-code vscode-debugger
Python 启动配置接受"module" 而不是"program"。它用于debugging specific Python applications,例如 Flask、Django 和 Scrapy。这是sample for a Flask app,看起来与您想要的相似:
{
"name": "Python: Flask",
"type": "python",
"request": "launch",
"module": "flask", # <---------------------
"env": {
"FLASK_APP": "app.py"
},
"args": [
"run",
"--no-debugger",
"--no-reload"
],
...
}
如您所见,此配置指定了
"env": {"FLASK_APP": "app.py"}和"args": ["run", "--no-debugger","--no-reload"]。使用"module": "flask"属性代替program。
因此,鉴于此示例工作区的文件夹 Q 包含 ModuleA.ModuleB:
$ tree .
.
├── Q
│ └── ModuleA
│ ├── __init__.py
│ └── ModuleB.py
└── .vscode
└── launch.json
ModuleB 在哪里:
import sys
if __name__ == "__main__":
print(*sys.argv)
您可以将此 launch.json 配置指定为:
{
"name": "run-specific-module",
"type": "python",
"request": "launch",
"console": "integratedTerminal",
"cwd": "${workspaceFolder}/Q",
"module": "ModuleA.ModuleB",
"args": [
"123",
"abc",
]
},
在终端中提供此输出的运行:
$ cd /path/to/Q ; env /path/to/python /path/to/.vscode/extensions/ms-python.python-2020.6.91350/pythonFiles/lib/python/debugpy/launcher 37343 -- -m ModuleA.ModuleB 123 abc
('/path/to/Q/ModuleA/ModuleB.py', '123', 'abc')
应该与以下内容相同:
$ python -m ModuleA.ModuleB 123 abc
('/path/to/Q/ModuleA/ModuleB.py', '123', 'abc')
【讨论】: