为什么Windows XP上的Python的os.system()命令在开始时需要两个双引号?

时间:2015-10-17 04:43:33

标签: python windows command-line cmd windows-xp

我在Windows XP上遇到了一些非常奇怪的行为。我使用Python执行命令,使用桌面文件夹中的快捷方式文件打开浏览器。

以下行是我期望的工作:

    os.system(r'"C:\Documents and Settings\you\Desktop\Chrome Browsers\Google Chrome 46.lnk" "chrome.google.com/webstore"')

它是一个原始字符串文字,因此所有反斜杠都是实际的反斜杠。我可以通过在该命令的开头放置echo来判断这是真的。 (即os.system(' echo" C:\ Documents and Settings \ blah \ blah chrome.google.com/webstore"'))

使用echo返回以下内容:

" C:\ Documents and Settings \ you \ Desktop \ Chrome浏览器\ Google Chrome 46.lnk" " chrome.google.com/webstore"

这看起来像一个很好的Windows命令,是吗?好吧。将其复制并粘贴到命令提示符中运行正常。但实际命令(没有回声)失败。错误说明

  

' C:\文件'不被视为内部或外部命令。

对于不带引号的路径,这是一个非常标准的错误。但等等,我们回应的命令很好,所以它应该运行,对吧?我猜不是......

通过反复试验,我找到了有用的东西。以下行是我能够启动浏览器的唯一方式:

os.system('""C:\Documents and Settings\you\Desktop\Chrome Browsers\Google Chrome 46.lnk" chrome.google.com/webstore"')

那是对的,显然解决办法是在命令开头添加一个额外的双引号,并在第二个参数之前取出双引号。

对于我看起来像空字符串,未加引号的路径与未转义的空格,然后是一个以空格开头的引用网址。

如果我回显该命令,它会返回您期望的内容:

""C:\Documents and Settings\you\Desktop\Chrome Browsers\Google Chrome 46.lnk" chrome.google.com/webstore"

但它有效!将回显结果粘贴到命令行失败,并且" C:\ Documents无法识别"之前的错误,但Python命令无论如何都会打开浏览器到正确的页面。

有人可以解释一下这里发生了什么吗?我对这种行为感到很困惑,因为它完全不是我所期待的。

P.S。在XP之后的每个Windows操作系统上,此行为完全不同。对于Vista和更新版本,命令是:

os.system(r'"C:\Users\you\Desktop\Chrome Browsers\Google Chrome\Google Chrome 46.lnk" "chrome.google.com/webstore"')

1 个答案:

答案 0 :(得分:0)

因为路径中有“”空格。 C:\Documents and Settings\..看到2个空格?否则它会将C:\Documents作为二进制文件,and作为第一个参数,Settings\..作为另一个参数...等等。这样你就说:整件事是二元C:\Documents and Settings\..chrome.google.com/webstore是我的论点。

有意义吗?