为什么,似乎我需要使用两个双引号来分隔文件路径?

时间:2014-09-19 13:44:15

标签: python string shell path

我在运行程序的python中编写脚本。需要引用路径或参数中的空格,但由于某种原因,它似乎无法工作,除非我使用双引号字符串,例如。

  DEFAULT_CLIENT = '""C:/Program Files/Borland/StarTeam SDK 14.0/bin""'
  command =('stjava.exe -autologon -is -p ""'+src+'"" -fp ""'+dst+'"" '
            '-filter "OI" "*" -f ""'+dst+'/config/bc.stjava""')
  if not "StarTeam Cross-Platform Client" in os.getenv("PATH"):
    print "[INFO] Star Team Client not found in path defaulting to: "+DEFAULT_CLIENT
    command = DEFAULT_CLIENT+"/"+command
  os.system(command)

这是为什么?如果我在这里做错了,那我该怎么做呢?

[更新] 调用os.system(command)时正确找到应用程序:

  command = r'"C:/Program Files/Borland/StarTeam SDK 14.0/bin/stjava.exe" '
  command += '-autologon -is -p '

但这并不是:

  command = '"C:/Program Files/Borland/StarTeam SDK 14.0/bin/stjava.exe" '
  command += '-autologon -is -p '
  command += '"C:\a\b c\d"'

它说' C:\ Program'不是公认的命令。论证中的路径似乎是一个问题,但我不知道为什么。

3 个答案:

答案 0 :(得分:0)

初步回答:

您希望C:/Program Files/Borland/StarTeam SDK 14.0/bin/stjava.exe成为完整的二进制路径,对吗? 由于路径中有空格,因此引号是必要的。

使用单引号,在连接后,它将类似于:"C:/Program Files/Borland/StarTeam SDK 14.0/bin"stjava.exe

您是否尝试使用正确的文件路径分隔符?

当您添加更多信息时,我还有另一个建议:

我看到命令字符串中的最后一个参数包含反斜杠字符。在许多情况下证明这些是有问题的。你可以尝试逃避这些,或将它们加倍,使其成为"C:\\a\\b c\\d"

之类的东西

答案 1 :(得分:0)

根据我的理解,您需要按照行命令

'"C:/Program Files/Borland/StarTeam SDK 14.0/bin/stjava.exe" -autologon -is -p "abc def" -fp "aa bb" -filter "OI" "*" -f "aa bb/config/bc.stjava"'

您可以通过以下方式实现:

>>> import os
>>> 
>>> DEFAULT_CLIENT = '"C:/Program Files/Borland/StarTeam SDK 14.0/bin"'
>>> 
>>> DEFAULT_CLIENT
'"C:/Program Files/Borland/StarTeam SDK 14.0/bin"'
>>> 
>>> src = "abc def"
>>> dst = "aa bb"
>>> 
>>> 
>>> command =('stjava.exe" -autologon -is -p "'+src+'" -fp "'+dst+'" -filter "OI" "*" -f "'+dst+'/config/bc.stjava"')
>>> 
>>> 
>>> 
>>> DEFAULT_CLIENT[:-1] + os.sep + command
'"C:/Program Files/Borland/StarTeam SDK 14.0/bin/stjava.exe" -autologon -is -p "abc def" -fp "aa bb" -filter "OI" "*" -f "aa bb/config/bc.stjava"'
>>> 
>>> 

答案 2 :(得分:0)

我要说的是,由于某种原因,您正在使用的命令行解析器或Windows或DOS命令行解释器需要引用的文件名才能使用"转义引号&# 34 ;.我尝试使用DOS DIR命令的各种组合,带有零,一和两个双引号,并且每次都有效。