【问题标题】:Specifying arguments in launch.json for Python在 Python 的 launch.json 中指定参数
【发布时间】:2017-09-21 09:59:31
【问题描述】:

我想在我的launch.json 文件中指定参数以进行调试。我知道我可以做到以下几点:

"args": ["--arg1", "value", "--arg2"]

但是,我有一个很长的参数列表,它们被格式化为空格分隔的字符串。像这样的东西:"--arg1 value --arg2"。我尝试指定:

"args": ["--arg1 value --arg2"]

但这没有用。现在我的工作流程是获取参数字符串,通过 Python 脚本运行它,将字符串更改为列表并将其复制粘贴到我的 launch.json 文件中。有没有更好的方法来做到这一点?

【问题讨论】:

  • 为什么不能以正确的形式将参数提供给 CS Code?那需要多少工作量?

标签: visual-studio-code


【解决方案1】:

请注意,在您需要键值参数之前,在 launch.json 中提供参数的工作方式与描述的一样。

例如命令

$ python main.py --verbose --name Test

必须像这样在 launch.json 参数行中编码:

"args": ["--verbose", "--name=Test"],

Python debug configurations in Visual Studio Code 的“Watson”示例中找到几乎隐藏的提示。

【讨论】:

  • 感谢您的回答!对于每个想知道的人,如果您需要添加路径,您可能必须将“\”更改为“/”,否则 VSCode 可能无法正确读取它。
【解决方案2】:

AAargh.. 我只是浪费了 30 分钟的时间试图弄清楚如何用价值明确定义论点。有时事情奏效,有时完全失败。我只是在看最后一条错误消息:// Use IntelliSense to learn about possible attributes.

原来我的 python 程序和文件 launch.json 在 VScode 打开编辑器中都处于活动状态。我正在对 launch.json 进行更改,但在启动调试器之前无法单击我的 python 文件。

哇! python 解释器在尝试运行 .json 文件时失败并不奇怪。需要仔细阅读完整的错误信息。 (错误信息应该是……嘿,你这个大笨蛋……你应该在执行 python 时使用 .py 文件!)

在此分享信息,以防其他人犯同样愚蠢的错误。

【讨论】:

  • 这篇文章实际上对我很有帮助。您需要关注要调试的文件,然后按 F5。谢谢!
  • 彼得莫滕森,真的吗?您在发布此答案两年后的编辑是不合适的,而且没有帮助。还是谢谢。
  • 从技术上讲,这根本不能回答原始问题。然而,这正是我真正需要的信息。谢谢分享!
【解决方案3】:

不幸的是,没有办法做你想做的事。参数只能作为数组传递,不能作为带空格的字符串传递。带空格的参数用引号括起来并作为一个完整的参数传递。

引用自documentation

args - 传递给程序进行调试的参数。这个属性是 输入数组并将单个参数作为数组元素

github 上一位开发人员的回答:

将命令行转换为“args”的规则很简单:每个由空格分隔的命令行参数都需要成为“args”属性的单独项。

示例:

Command:
tar -cvf test-14-09-12.tar /home/test/

Args:
"args": ["-cvf", "test-14-09-12.tar", "/home/test/"]
Command:
tar -c --file new.tar --include='*foo*' old.tgz

Args:
"args": ["-c", "--file", "new.tar", "--include='*foo*'", "old.tgz"]

更新:

我找到了解决方案,使用 sn-ps。

您可以将 sn-p 添加到全局 sn-ps 或项目 sn-ps,如 here 所述:

"args_transform": {
    "scope": "jsonc",
    "prefix": "args_transform",
    "body": "${1/((\"(.*?)\")|('(.*?)')|([^ ]+))( )?/\"$3$6$5\"${7:+, }/g}"
}

在您需要在launch.json(或任何其他带有cmets文件的json)中写入args的地方写入args_transform,按tab,插入您的args,然后再次按tab

但它可能无法与某种参数一起正常工作,如果需要 sn-p 修复,请在 cmets 中写入错误

【讨论】:

  • 最好列出一些示例,因为这是公认的答案:)(我知道这些都列在下面的单独答案中)
  • 谢谢,它正在 Windows 中使用此命令。 "args": ["-cvf", "test-14-09-12.tar", "\\home\\test"]
【解决方案4】:

试试这个:

"args": [   "-arg1 value1",
            "-argname2 value2"],

它适用于我的 PowerShell 命名参数。

【讨论】:

    【解决方案5】:

    虽然不多,但却是诚实的工作:

    import json
    
    input_args = "--arg1 value --arg2"
    
    vscode_args = list(input_args.split(" "))
    print(json.dumps(vscode_args))
    

    打印出来:

    ["--arg1", "value", "--arg2"]
    

    您可以将其粘贴到您的 launch.json 文件中。

    我这样做是因为我有很多要转换的论据。这很方便。

    【讨论】:

      【解决方案6】:

      这对我有用:

      我为我正在使用的调试器(启动器)定义了一个变量('workspace_path')。

      设置->扩展->机器人框架->机器人变量Robot: Variables

      编辑文件 'settings.json' -> settings.json 并添加变量(例如:'workspace_path')

      运行 -> 打开配置 -> 编辑文件 'launch.json' launch.json 并添加参数 workspace_path(没有 cuotes)。

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 2022-12-30
        • 2021-10-16
        • 1970-01-01
        • 1970-01-01
        • 2020-01-13
        相关资源
        最近更新 更多