Python中解析路径时出现的奇怪问题

Python中解析路径时出现的奇怪问题,python,parsing,Python,Parsing,考虑到这些变量: cardIP="00.00.00.00" dir="D:\\TestingScript" mainScriptPath='"\\\\XX\\XX\\XX\\Testing\\SNMP Tests\\Python Script\\MainScript.py"' 使用subprocess.call(“cmd/c”+mainScriptPath+“”+dir+“”+cardIP)和print(mainScriptPath+“”+dir+“”+cardIP) "\\XX\XX\XX

考虑到这些变量:

cardIP="00.00.00.00"
dir="D:\\TestingScript"
mainScriptPath='"\\\\XX\\XX\\XX\\Testing\\SNMP Tests\\Python Script\\MainScript.py"'
使用
subprocess.call(“cmd/c”+mainScriptPath+“”+dir+“”+cardIP)
print(mainScriptPath+“”+dir+“”+cardIP)

 "\\XX\XX\XX\Testing\SNMP Tests\Python Script\MainScript.py"  D:\TestingScript  00.00.00.00
这就是我想要的,好吧

但是现在,我希望'dir'变量也在“”内,因为我要将dir名称与空格一起使用。 所以,我对“mainScriptPath”做了同样的事情:

cardIP="00.00.00.00"
dir='"D:\\Testing Script"'
mainScriptPath='"\\XX\\XX\\XX\\Testing\\SNMP Tests\\Python Script\\MainScript.py"'
但是现在,当我执行
打印(mainScriptPath+“”+dir+“”+cardIP)
时,我得到:

"\\XX\XX\XX\Testing\SNMP Tests\Python Script\MainScript.py"  "D:\Testing Script"  00.00.00.00
这很好,但是当在
子流程调用(“cmd/c”+mainScriptPath+“”+dir+“”+cardIP)
中执行时,“mainScriptPath”变量出现故障:

 '\\XX\XX\XX\Testing\SNMP' is not recognized as an internal or external command...
这对我来说毫无意义。
为什么会失败

此外,我还尝试:

dir="\""+"D:\\Testing Script"+"\""
在“print”中的操作很好,但在“subprocess.call”中会引发相同的问题


(Windows XP,Python3.3)

使用正确的字符串格式,对格式字符串使用单引号,只需包含引号:

subprocess.call('cmd /c "{}" "{}" "{}"'.format(mainScriptPath, dir, cardIP))
另一种方法是传入一个参数列表,让Python负责为您引用:

subprocess.call(['cmd', '/c', mainScriptPath, dir, cardIP])
.call()
的第一个参数是一个列表时,Python使用本节中描述的过程

在Windows上,args序列被转换为可以 使用以下规则(与使用的规则相对应)进行分析 由MS C运行时提供):

  • 参数由空格分隔,空格可以是空格,也可以是制表符
  • 被双引号包围的字符串被解释为单个参数,而不管其中包含的空格。引用的 字符串可以嵌入到参数中
  • 前跟反斜杠的双引号被解释为文字双引号
  • 反斜杠按字面解释,除非它们紧跟在双引号之前
  • 如果反斜杠紧跟在双引号之前,则每对反斜杠都被解释为文字反斜杠。如果 反斜杠的数量为奇数,最后一个反斜杠会转义下一个反斜杠 规则3中所述的双引号

  • 这意味着以序列形式传递参数会使Python担心正确转义参数的所有细节,包括处理嵌入的反斜杠和双引号。

    在命令行中键入相同命令时会发生什么情况?请使用Pythonic字符串扩展,如
    “%s%s%”(arg1,arg2)
    “{1}{2}”。格式(…)
    。这不是javascript,用
    +
    添加字符串几乎没有什么好理由。我编辑了这篇文章。请注意,如果我使用其中一种方法,我应该如何定义“mainScriptPath,dir”变量?带“'”和“\”“还是根本不需要?@user2162550:不需要引用在这种情况下,让Python为您处理这些内容。@user2162550:那么问题在于您正在调用的
    MainScript.py
    子流程
    调用正在尽其所能传递正确引用的路径。在该脚本中,
    print sys.argv
    告诉您传入了什么?@user2162550:您确实从
    mainScriptPath
    中删除了引号,对吗?@user2162550:您必须显示变量的确切值和错误消息。