繁体   English   中英

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

[英]Why does Python's os.system() command on Windows XP require two double quotes at the beginning to run?

我在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:\\ Documents'不被识别为内部或外部命令。

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

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

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

没错,显然解决方案是在命令开头添加一个额外的双引号,并在第二个参数之前删除双引号。

对我来说,它看起来像是空字符串,带有未转义空格的未引用路径,然后是带空格开头的带引号的url。

如果我回显该命令,它将返回您期望的结果:

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

但这有效! 将该回声结果粘贴到命令行失败,并且之前出现“ C:\\ Documents not defined”错误,但是Python命令无论如何都会将浏览器打开到正确的页面。

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

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

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

因为您的路径中有空格。 C:\\Documents and Settings\\..看到2个空格吗? 否则它将选择C:\\Documents作为二进制文件, and作为第一个参数,将Settings\\..作为另一个参数。 您这样说:整个事情是一个二进制C:\\Documents and Settings\\..chrome.google.com/webstore是我的观点。

说得通?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM