Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
Cmd Windows上的Visual Studio代码:如何使用launch.json传递命令行参数?_Cmd_Visual Studio Code_Vscode Debugger - Fatal编程技术网

Cmd Windows上的Visual Studio代码:如何使用launch.json传递命令行参数?

Cmd Windows上的Visual Studio代码:如何使用launch.json传递命令行参数?,cmd,visual-studio-code,vscode-debugger,Cmd,Visual Studio Code,Vscode Debugger,通过windows命令行,我可以按如下方式成功调用脚本: python spot_check.py“stop | CHST SQ|u ARRIVAL | 2.3”stop | 14 ST|u ARRIVAL | 2.6”19:06:28“19:15:00” 但是,如果我想使用VS代码调试器,并使用launch.json中的args属性传递相同的参数 “args”:[ “停止| CHST SQ|U到达| 2.3”, “停站| 14街|到达| 2.6”, "19:06:28", "19:15:00

通过windows命令行,我可以按如下方式成功调用脚本:

python spot_check.py“stop | CHST SQ|u ARRIVAL | 2.3”stop | 14 ST|u ARRIVAL | 2.6”19:06:28“19:15:00”
但是,如果我想使用VS代码调试器,并使用launch.json中的args属性传递相同的参数

“args”:[
“停止| CHST SQ|U到达| 2.3”,
“停站| 14街|到达| 2.6”,
"19:06:28",
"19:15:00",
]
然后我得到以下错误:

(base) c:\Users\1266143\Desktop\stringlines_ml>cd c:\Users\1266143\Desktop\stringlines_ml && cmd /C "set "PYTHONIOENCODING=UTF-8" && set "PYTHONUNBUFFERED=1" && C:\Users\1266143\AppData\Local\Continuum\anaconda3\python.exe c:\Users\1266143\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\ptvsd_launcher.py --default --client --host localhost --port 61850 c:\Users\1266143\Desktop\stringlines_ml\spot_check.py "stop|CHST SQ_ARRIVAL|2.3" "stop|14   ST_ARRIVAL|2.6" 19:06:28 19:15:00"
'CHST' is not recognized as an internal or external command,
operable program or batch file.
读取“CHST”的部分不能识别为内部或外部命令、可操作程序或批处理文件。使我相信
|
被解释为重定向,而不是字符串文字参数中的字符,而
CHST
后面的空格表示
CHST
被解释为命令。但是为什么这些参数在命令行上的计算结果与在VisualStudio中的不同呢?如何确保在调试模式下将这些参数正确传递给命令行应用程序?

这些不是您要查找的引号 您需要在参数周围加引号,如直接在命令行上运行脚本/程序时所示(即停止CHST SQU到达2.3“)

但是在JSON中,当JSON被解释时,第一组引号将被剥离,因此JSON中的字符串
“stop | CHST SQ|u ARRIVAL | 2.3”
在被馈送到后面的进程之前就变成了
stop | CHST SQ u ARRIVAL | 2.3

然后,所有参数都被输入到命令行或Python解释器,这看起来像这样(尽管它可能是一个带有大量调试标志等的大行):

c:/mypath/myfile停止| CHST SQ|u到达| 2.3停止| 14 ST|u到达| 2.6 19:06:28 19:15:00
你以为围绕这些论点的引语已经不存在了。这意味着解析器将竖条符号解释为“Pipe”命令,它告诉解析器第一个命令已经完成,并且解析器应该将该命令的输出和“Pipe”命令传递给后面的命令

因此,解析器认为是您告诉它的:

  • 运行命令
    c:/mypath/myfile stop
  • 获取该命令的输出并将其传输到命令
    CHST SQ_ARRIVAL
  • 通过管道将该命令的输出传输到命令
    2.3 stop
  • 等等
  • 由于它找不到带有参数
    SQ_ARRIVAL
    的命令
    CHST
    ,因此它会向您提供所看到的错误消息


    问题已经解决了 如果希望引号最终作为参数的一部分传递,则需要将其分层。如何做到这一点取决于JSON解释器将如何处理多组引号(我不确定它是如何做到的)

    有几件事可以尝试:

  • 使用三重引号:
    “stop | CHST SQ|u ARRIVAL | 2.3”“”
    -在某些解析器中,当它看到第一个引号时,它会启动一个字符串,但如果它在其后的一行中看到两个引号,它会将它们放入字符串中的引号中,而不是结束它。因此,第一个和最后一个引号开始和结束字符串,而其他两对引号将被压缩到参数外部的引号中

  • 在JSON字符串内的引号前面使用反斜杠:
    “\”stop | CHST SQ|u ARRIVAL | 2.3\”
    -在许多解析器中,反斜杠字符是一个“转义”字符,紧跟其后的任何字符都被视为将直接放入字符串中的字符串文字,即使它通常是一个特殊字符

  • 在字符串中使用单引号:
    “'stop | CHST SQ|u ARRIVAL | 2.3'
    -由于Python可以使用单引号或双引号作为字符串,因此通常使用单引号发送给Python解释器的任何参数也将被视为字符串。但是,我不确定在这种情况下,这些参数会达到什么程度,它们可能会首先由shell解释,这可能不会考虑单引号是字符串的开始(但你永远不知道……) 哪种方法有效可能取决于您使用的shell(即Windows命令提示符、Powershell、Git Bash、sh、c-sh等)。它们中的每一个都可以以不同的方式处理字符串的命令行解释

    如果这些都不起作用,知道根本原因后,进一步搜索应该会找到答案。祝你好运