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