2014-09-19 33 views
0

我正在写一个运行程序的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:\程序' 是无法识别的命令。争论中的路径似乎是一个问题,但我不知道为什么。

+0

你可以请显示实际的字符串不适合你吗? – thefourtheye 2014-09-19 13:46:06

+0

当然,在这里:'“C:/ Program Files/Borland/StarTeam SDK 14.0/bin”' – 2014-09-19 13:47:19

+0

期望的输出字符串是什么?你可以使用os.sep作为路径分隔符。 – 2014-09-19 14:06:22

回答

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"之类的东西吗?

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"' 
>>> 
>>> 
+0

感谢您的回答,但事实并非如此。问题似乎与争论 - 我更新了我的问题。 – 2014-09-19 14:32:35

+0

Oho好的。在这种情况下,我会建议你进一步调试。命令是否工作没有任何参数?我的意思是,如果您执行os.system(r'“C:/ Program Files/Borland/StarTeam SDK 14.0/bin/stjava.exe”'),会发生什么情况。你可以检查subprocess.call吗? – 2014-09-19 14:43:40

0

我要出去肢体和说,对于一些原因,您使用的命令行解析器或Windows或DOS命令行解释器需要引用文件名以具有“转义引号”。我使用零,一个和两个双引号尝试了DOS DIR命令的各种组合,并且它每次都有效。

相关问题