在Python中解析路径时遇到的奇怪问题

时间:2013-09-03 08:59:02

标签: 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\Testing\SNMP Tests\Python Script\MainScript.py"  D:\TestingScript  00.00.00.00

这就是我想要的,好的。

但是现在,我希望'dir'变量也在“”里面,因为我将使用带空格的目录名称。 所以,我对'mainScriptPath'做了同样的事情:

cardIP="00.00.00.00"
dir='"D:\\Testing Script"'
mainScriptPath='"\\XX\\XX\\XX\\Testing\\SNMP Tests\\Python Script\\MainScript.py"'

但现在,当我正在做print(mainScriptPath+" "+dir+" "+cardIP)时,我得到了:

"\\XX\XX\XX\Testing\SNMP Tests\Python Script\MainScript.py"  "D:\Testing Script"  00.00.00.00

哪个好,但在subprocess.call("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)

1 个答案:

答案 0 :(得分:3)

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

subprocess.call('cmd /c "{}" "{}" "{}"'.format(mainScriptPath, dir, cardIP))

另一种方法是传入参数的列表,并让Python负责为你引用:

subprocess.call(['cmd', '/c', mainScriptPath, dir, cardIP])

.call()的第一个参数是列表时,Python使用Converting an argument sequence to a string on Windows部分中描述的过程。

  

在Windows上, args 序列将转换为可以的字符串   使用以下规则解析(对应于使用的规则)   通过MS C运行时):

     
      
  1. 参数由空格分隔,可以是空格或制表符。
  2.   
  3. 由双引号括起的字符串被解释为单个参数,而不管其中包含的空格。引用   string可以嵌入到参数中。
  4.   
  5. 以反斜杠开头的双引号被解释为文字双引号。
  6.   
  7. 反斜杠按字面解释,除非它们紧跟在双引号之前。
  8.   
  9. 如果反斜杠紧跟在双引号之前,则每对反斜杠都被解释为文字反斜杠。如果   反斜杠的数量是奇数,最后一个反斜杠逃脱了下一个反斜杠   如第3条所述的双引号。
  10.   

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