Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python';Windows XP上的s os.system()命令在开始运行时需要两个双引号?_Python_Windows_Command Line_Cmd_Windows Xp - Fatal编程技术网

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

为什么Python';Windows XP上的s os.system()命令在开始运行时需要两个双引号?,python,windows,command-line,cmd,windows-xp,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放在该命令

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

以下是我希望做这项工作的内容:

    os.system(r'"C:\Documents and Settings\you\Desktop\Chrome Browsers\Google Chrome 46.lnk" "chrome.google.com/webstore"')
这是一个原始字符串文字,所以所有的反斜杠都是实际的反斜杠。我可以通过将echo放在该命令的开头来判断这是真的。(即操作系统('echo“C:\Documents and Settings\blah\blah chrome.google.com/webstore“))

使用echo返回以下内容:

“C:\Documents and Settings\you\Desktop\Chrome Browsers\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 Recognited”错误,但Python命令仍会将浏览器打开到正确的页面

有人能解释一下这里发生了什么事吗?我真的被这种行为弄糊涂了,因为它根本不是我所期望的

另外,这种行为在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
作为二进制文件,把
作为第一个参数,把
Settings\..
作为另一个参数。。等等你是这样说的:这整个东西是一个二进制的
C:\Documents and Settings\..
,而
chrome.google.com/webstore
是我的论点


有意义吗?

这不是XP特有的,我不能(基于类似的例子)重复你关于最后一个例子在Vista+中工作的说法。cmd有文档记录的行为是,仅当整个命令行满足所有这些条件时才保留引号:no/s开关、正好两个引号、引号之间没有特殊字符、引号之间有一个或多个空格字符、两个引号之间的字符串是可执行文件的名称。否则,如果命令以引号开头,它将删除它加上命令行中的最后一个引号。要解决Windows上
shell=True
的问题,子流程模块使用以下命令:
args='{}/c“{}”。format(comspec,args)
。注意它是如何引用整个命令行的。在Windows10中,我创建了“C:\Temp\with spaces\python.lnk”,链接到python.exe<代码>操作系统(r''C:\temp\with spaces\python.lnk')正常工作<代码>操作系统(r''C:\temp\with spaces\python.lnk”“--version“)按预期失败<代码>操作系统(r''C:\temp\with spaces\python.lnk”“--version”“)正常工作。