Visual Studio Code: 使用参数运行 Python 文件

81

有没有一种简单的方法在Visual Studio Code中运行Python文件并带有参数?

我知道可以使用args关键字在launch.json文件中添加自定义配置。但是,每次想使用不同的参数时修改launch.json文件非常麻烦。

11个回答

71
Visual Studio Code只支持一个launch.json文件。然而,它支持在调试面板的下拉列表中出现两个或更多的配置(而不是“无配置”)。

Enter image description here

在DEBUG窗格中,要么点击上面用红色圈出的Config按钮,要么点击蓝色链接"create launch.json file"
点击它,它会创建一个带有调试配置的launch.json文件。编辑此文件,并以键值对格式添加args,同时为不同的args添加多个,包括Variable Substitution
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File with my args",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "args": [
                "--username", "Jeremy",
                "--account", "Stackoverflow"
            ],
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Current File with UserName arg",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "args": ["${env:USERNAME}"],
            "console": "integratedTerminal"
        }
    ]
}

在下拉菜单中设置您所需的配置选项,并在您的Python脚本中设置断点,例如在def main(...)下的第一行,然后按下F5Run> Start Debugging
专业提示:参考Variable Substitution,这是一个完美的方式,通过不在配置中硬编码个人信息或设置,而是使用构建流水线中的环境变量等内容来自动化整个团队的工作!
专业提示:
默认设置(硬编码的POCO构造函数值)。
使用可选设置覆盖默认硬编码值的设置文件(也称为launch.json)。
使用环境变量来覆盖任何设置。

7
这是一个有帮助的回答,但问题是关于“运行”,而不是“调试”。是否可以在没有调试器引起的延迟的情况下使用参数运行脚本? - Leo
它是一个集成开发环境,所以你可以使用 vscode.exe -path c:\file.py -args a=b 来运行它吗? - Jeremy Thompson
@Thyrst 我已经更新了答案,你能再看一下吗?谢谢。 - Jeremy Thompson
1
我能否在正常运行时使用启动配置,而不是调试?或者我该如何在没有调试的情况下传递参数? - CGFoX
@CGFoX 也许可以尝试模拟一下?https://dev59.com/zqzka4cB1Zd3GeqP_6MT#65210837 - Jeremy Thompson
1
@Leo,在调试面板中选择一个配置,然后按Ctrl - F5以无调试模式运行。 - undefined

7

一个解决方法是让脚本在内部的 Visual Studio Code 控制台中请求命令行参数。

通过依赖于 readline,你可以更加方便地使用,比如按上箭头键以循环查看之前的命令(命令历史记录),等等。以下是一个例子:

import argparse, readline

def main():
  # Ask for additional command line arguments if needed (for VSCode)
  parser = argparse.ArgumentParser()
  parser.add_argument('--interactive', action='store_true', default=False)
  (args, rest) = parser.parse_known_args()
  if args.interactive:
    try: readline.read_history_file()
    except: pass
    rest += input("Arguments: ").split(" ")  # Get input args
    try: readline.write_history_file()
    except: pass

  # Your other script arguments go here
  parser.add_argument("-output-dir", default="/out")
  # ...
  args = parser.parse_args(rest)

  print(args)

if __name__ == "__main__":
  main()

只需设置Visual Studio Code始终传递--interactive参数,您的脚本将始终要求输入参数(带有历史记录!),即使您设置断点。


1
请问您能否包含如何“设置Visual Studio Code始终传递--interactive参数”的内容? - harlekintiger

6
你可以添加自定义任务来完成此操作。这涉及到tasks.json文件。您可以为项目(项目文件夹)添加默认的tasks.json文件。按照以下步骤操作。键盘按下Ctrl+Shift+B。它会提示以下弹出窗口。

Enter image description here

点击配置构建任务。如果在以下位置.vscode/tasks.json已经创建了自定义的tasks.json文件,编辑器将打开它。否则,它将提供一个下拉列表,列出已存在的任务运行器。
我们的目的是为我们的项目创建一个自定义的tasks.json文件,因此我们需要从下拉列表中选择其他选项来创建一个。请参考下面的截图。

Enter image description here

一旦您选择了其他选项,您将看到一个默认的tasks.json文件将从项目的根目录创建到位置.vscode/tasks.json。下面是一个tasks.json的示例。

Enter image description here

现在编辑 tasks.json 文件以支持Python。
  1. 将Command属性从"echo"更改为"Python"
  2. 保持showOutput为"Always"
  3. 将args(参数)从["Hello World"]更改为["${file}"](文件名)
  4. 删除最后一个属性problemMatcher
  5. 保持isShellCommand和version属性不变
  6. 保存所做的更改

现在,您可以打开您的.py文件并使用快捷键Ctrl + Shift + B运行它。


1
谢谢您的回答。但是我还不明白... Ctrl+Shift+B 运行脚本,但我该如何传递参数呢? - Thyrst'
5
我想通过命令面板启动调试器,例如使用类似于“debug arg1 arg2”的命令,这将像“python app.py arg1 arg2”一样启动我的脚本。 - Thyrst'

5
如果您的项目中没有 task.json 文件,可以按下 Ctrl + Shift + B 来创建一个新的。然后选择第一个选项并用以下内容替换所有内容:
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Run Python with argument",
            "type": "shell",
            "command": "python PROGRAM_NAME.py ARG1 ARG2 ...",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

否则,请将上述配置添加到您现有的tasks.json文件中。

将上述配置中的PROGRAM_NAME替换为您的程序名称,ARG1 ARG2 ...指示您的特定参数。

最后,您可以使用Ctrl + Shift + B执行创建的任务,并选择新的“带参数运行Python”任务。


我要如何运行它? - Maths12
创建您的任务,然后按下CTRL + SHIFT + b。VS CODE会显示当前任务列表。使用您指定的标签搜索您的任务,然后按Enter键。 - Ehsan Ahmadi
我想运行名为run.py的Python脚本,该脚本接受参数'train'或'validate'。那么,在上述情况下,我应该将命令替换为:'python run.py 'train''吗? - Maths12
在命令的值中输入“yes”。你应该像这样输入“python /path/to/run.py train”。 - Ehsan Ahmadi

2
另一种选择是通过命令行运行您的Python程序,方法如下:
python3 -m debugpy --wait-for-client --listen localhost:5678 myprogram.py

然后,您可以使用一个Python: Remote Attach启动配置的launch.json连接到程序。这意味着每次打开程序时都需要额外的步骤:在CLI上运行程序,然后附加调试器,但它确实使指定参数更加流畅。

为了使事情变得更简单,您可以将上述内容放入一个bash脚本中,并从CLI传递参数到python:

start.sh "my arg that changes all the time"

然后通过“远程连接”进行附加。


0
此外,对于那些不太熟悉在launch.json中创建配置的人来说,还可以参考xdhmoore的回答,应该如下所示:
"configurations": [
    ...,
    {
        "name": "Python: Remote Attach",
        "type": "python",
        "request": "attach",
        "host": "127.0.0.1",
        "port": 5678

    }
]

要开始调试,请首先在终端中发出命令行命令,然后从VS Code的调试启动菜单中启动(新创建的)启动配置Python: Remote Attach

0
如果你已经知道如何在launch.json中设置args并进行调试,而你的问题是如何运行带有参数的Python程序,只需选择“运行”->“无调试运行”。

0

我已经寻找了解决此问题的方法,但认为没有任何答案是足够的,因此我创建了一个debugpy-run实用程序来解决它。

如果您已安装VS Code Python扩展,则完整的debugpy调试器已经与其捆绑在一起。该实用程序会查找debugpy安装的路径,然后以监听模式运行指定程序和参数。使用Python“远程附加”调试配置(使用默认主机和端口设置)从VS Code内部连接到它。对于每个调试运行,您可以使用您的shell历史记录和命令行编辑工具,只需control+c,然后重新运行带有更改参数的命令。


0

我在VS 2019中遇到了类似的问题。我想在由VS生成的环境中使用参数启动Python文件。我找不到好的简单解决方案,所以基本上我去了ENV\Scripts文件夹,在那里打开终端并运行

python "FullPath\MyFile.py" -一些参数

它可以正常工作,但需要关闭VS。


这并没有真正回答问题。如果你有不同的问题,可以通过点击提问来询问。如果想在此问题有新回答时得到通知,可以关注此问题。一旦你获得足够的声望,你也可以添加赏金以吸引更多关注此问题的人。- 来自审核 - Juanmi Taboada

-2

如果您正在使用虚拟环境,请确保使用完整路径来访问该环境的Python解释器。


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