下面代码中的变量 content 加上双引号就报错,不知道为什么。
import os
chrome = r'"C:\Program Files\Google\Chrome\Application\chrome.exe"'
content='a b c'.replace(' ', '%20')
cmd = chrome + ' --args --new-window https://baidu.com?wd={content}'
cmd1 = f'{chrome} --args --new-window https://baidu.com?wd={content}'
cmd2 = f'{chrome} --args --new-window https://baidu.com/s?wd="{content}"' # error
# "C:\Program Files\Google\Chrome\Application\chrome.exe" --args --new-window https://baidu.com/s?wd="a%20b%20c"
print(cmd2)
# os.system(cmd) # ok
# os.system(cmd1) # ok
# os.system(cmd2) # error
# os.system(f'{chrome} --args --new-window https://baidu.com/s?wd={content}') # ok
os.system(f'{chrome} --args --new-window https://baidu.com/s?wd="{content}"') # error
# os.system(f'{chrome} --args --new-window https://baidu.com/s?wd=\"{content}\"') # error
# os.system(f"{chrome} --args --new-window https://baidu.com/s?wd=\"{content}\"") # error
#os.system(r'"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --new-window https://baidu.com/s?wd="a%20b%20c"') # error
#os.system(r'C:\Program Files\Google\Chrome\Application\chrome.exe --args --new-window https://baidu.com/s?wd="a%20b%20c"') # error
输出:
C:\cygwin64\home\god\bin\test\test>python test1.py
"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --new-window https://baidu.com/s?wd="a%20b%20c"
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
cmd2 的输出是 "C:\Program Files\Google\Chrome\Application\chrome.exe" --args --new-window https://baidu.com/s?wd="a%20b%20c"
这个在 cmd 下可以直接运行,但是放到 os.system(cmd2) 中就报错。
再举例:
>>> cmd2 = '"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --new-window https://baidu.com/s?wd="a%20b%20c"'
>>> os.system(cmd2)
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
1
# wd 后面的参数不加双引号就正常了,但是下面这个在编译后运行时报错,必须给 cmd2 后面的字符串加上 r'"C:\Pro......"' 再次编译运行才正常
>>> cmd2 = '"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --new-window https://baidu.com/s?wd=a%20b%20c'
>>> os.system(cmd2)
0
>>>
想知道为什么。
问题比较有趣,正如你提到的,如果你直接把 cmd 打印的内容在 cmd 执行,是可以执行的。
但是这并不代表实际是可行的,在 Windows 上,文档中是这样说的:
也就是说,实际上看起来应该是像这样运行的
如果你拷贝这段到 cmd 执行,你就会发现你会得到一个一模一样的输出,即
C:\Program
命令不存在现在在 cmd 上执行
cmd /?
你会看到一段文字
第 1 点中提到了 正好两个引号字符 ,也就是你给后面 wd 后面的参数不加双引号就正常了 的原因。
然后注意看第 2 点,也就是说实际执行的应该是
注意,前面没有引号,也就是导致报错的原因了,那我们应该怎么改呢?答案是在首尾再添加一个双引号。
即最终成
即可调用成功。
但是这样并不优雅,要使用优雅的方案的话,更加推荐使用。
参考