我有一个包含&符号的url
。
我还有cmd
以下
cmd = 'wget --verbose --auth-no-challenge --no-check-certificate -O res'
当我使用子进程运行命令后,我的url选项在第一个&符后不包含在实际查询中。
>>> p = subprocess.Popen(cmd + " " + url , shell=True)
我可以做些什么来确保传递整个网址?
答案 0 :(得分:2)
我遇到了类似的问题,试图弄清楚如何为Popen格式化命令。现在我几乎总是使用shlex.split()为我做这件事。
来自python.org的示例:
>>> import shlex, subprocess
>>> command_line = raw_input()
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
>>> args = shlex.split(command_line)
>>> print args
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
>>> p = subprocess.Popen(args) # Success!
因此,对于这个特定的例子,你可能有像
这样的东西>>> import shlex, subprocess
>>> url = 'http://www.example.com/somepage.html?foo=spam&bar=eggs&baz=ni'
>>> cmd = 'wget --verbose --auth-no-challenge --no-check-certificate -O res ' + url
>>> args = shlex.split(cmd)
>>> p = subprocess.Popen(args)
>>> --2013-12-13 13:36:11-- http://www.example.com/somepage.html?foo=spam&bar=eggs&baz=ni
答案 1 :(得分:1)
尝试使用单引号引用网址:
url = "'what&ever&address'"