我在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"')
答案 0 :(得分:0)
因为路径中有“”空格。 C:\Documents and Settings\..
看到2个空格?否则它会将C:\Documents
作为二进制文件,and
作为第一个参数,Settings\..
作为另一个参数...等等。这样你就说:整件事是二元C:\Documents and Settings\..
而chrome.google.com/webstore
是我的论点。
有意义吗?