如何在VS的调试模式下向Python传递命令行参数?

19

我正在使用 Visual Studio 的 Python 工具(注意,不是 IronPython)。

我需要处理从命令行传递给模块的参数。我知道可以通过在代码窗口中右键单击并选择“以调试方式启动”来启动调试模式。但是这种方法从未提示我输入命令行参数,而且 len(sys.argv) 始终等于 1。

如何以调试模式启动我的模块并传递参数,以便 sys.argv 有多个成员?


按下 super 键(带有小窗口的符号);输入 cmd;打开 cmd.exe;进入您的项目,... :-P - LittleByBlue
根据你的建议,我刚刚尝试了一下。它可以运行Python模块,但在Visual Studio中无法运行。还有其他建议吗? - philologon
有人能想到绕过D. Alveno的声明“要么这个,要么那个”的方法吗?我可以编写另一个.py文件来调用Windows命令行以调用我的真实.py文件,但在调试模式下运行它吗?也许我可以获取len(sys.argv),如果它等于1,那么尝试打开sysargv.txt文件? - philologon
5个回答

16

步骤显示在此处链接的图像中:

image

  1. 进入VS Code的调试模式
  2. 单击设置图标(齿轮图标)。如果不存在,这将创建一个launch.json文件
  3. 在json中任意一个配置中添加args json参数:
{
    "name": "Python: Terminal (integrated)",
    "type": "python",
    "request": "launch",
    "stopOnEntry": true,
    "pythonPath": "${config:python.pythonPath}",
    "program": "${file}",
    "cwd": "",
    "console": "integratedTerminal",
    "env": {},
    "args": [
        "input2.csv",
        "output2.csv"
    ],
    "envFile": "${workspaceFolder}/.env",
    "debugOptions": [],
    "internalConsoleOptions": "neverOpen"
}

在调试时,请确保选择该环境


我是调试模式,添加“args”参数并没有改变传递给脚本的参数。 - mateuszb
2
他不是在使用VS Code,而是在使用VS。 - legalize

12
  1. 进入项目属性,可以通过右键单击项目并选择“属性”,或者从项目菜单中选择“属性”来实现。

  2. 点击调试(Debug),然后将参数输入到“脚本参数(Script Arguments)”字段中。

  3. 保存。

Visual Studio对话框截图


我一直在没有项目的情况下工作 - 只是在编辑器中打开了.py文件。有没有一种方法可以在不创建项目的情况下完成,或者那是必需的步骤? - philologon
你尝试过直接从命令行传递参数给脚本吗?为了测试目的,你可能想遍历sys.argv并打印出它包含的内容。 - Ron Sims II
1
@jgfооt,非常感谢!这正是我在寻找的! - plditallo

4

我通过在脚本的第一行设置断点并在VS中打开“立即窗口”(您可以在其中在脚本的上下文中执行命令)来解决了这个问题。然后我运行

import sys
sys.argv += 'arg1 arg2 --arg3'.split()

0

您想从调试下拉菜单中选择“使用Python交互式执行项目”。其键盘快捷键为Shift+Alt+F5。这样做后,您将在屏幕底部打开一个名为Python Interactive的窗口,并且您将看到您的打印语句以及程序中任何输入提示。

但是,这并不允许您同时进入调试模式。它只能是其中之一。


谢谢。我已经调整了这个问题的标题,以反映我对在调试模式下使用命令行参数的兴趣。很抱歉之前没有表达清楚,那是我的疏忽。 - philologon
在这种情况下,看起来 VS 正在使用 pythonw.exe 而不是 python.exe 运行您的 Python 文件。当您使用调试启动程序时,在“进程”(VS 左上角)中是否显示 pythonw.exe?如果是这样,那么在运行程序时不会出现终端窗口。如果您想将输入传递到程序中,则需要使用 python.exe 运行它。 - David
在弹出的控制台窗口中,窗口标题显示为python.exe。 - philologon
1
我接受了这个答案,因为它的最后一句话可以重新表述为“你无法传递命令行参数并在调试模式下运行代码”。 - philologon
你可以按照@jgfoot的回答来使用调试模式。 - azerty

0

1. 如果您正在使用Anaconda,则从Anaconda Navigator启动VSCode。

2. 然后从文件夹中打开您的Python文件。

3. 接着,进入调试选项并单击添加配置,然后将打开launch.json文件,在该文件中有一行"console": "integratedTerminal",请注释此行并添加"console":"none"和"args":["your command line arguments"],然后保存。

4. 调试或运行您的Python文件。请参阅下面的链接。如何在VSCode中添加命令行参数? https://code.visualstudio.com/docs/python/debugging


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接