Cmd Windows上的Visual Studio代码:如何使用launch.json传递命令行参数?
通过windows命令行,我可以按如下方式成功调用脚本: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
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”“”
-在某些解析器中,当它看到第一个引号时,它会启动一个字符串,但如果它在其后的一行中看到两个引号,它会将它们放入字符串中的引号中,而不是结束它。因此,第一个和最后一个引号开始和结束字符串,而其他两对引号将被压缩到参数外部的引号中“\”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等)。它们中的每一个都可以以不同的方式处理字符串的命令行解释
如果这些都不起作用,知道根本原因后,进一步搜索应该会找到答案。祝你好运