使用python子进程Wget问题

时间:2013-12-13 21:11:50

标签: python wget

我有一个包含&符号的url。 我还有cmd以下

cmd = 'wget --verbose --auth-no-challenge --no-check-certificate -O res'

当我使用子进程运行命令后,我的url选项在第一个&符后不包含在实际查询中。

>>> p = subprocess.Popen(cmd + " " + url , shell=True)

我可以做些什么来确保传递整个网址?

2 个答案:

答案 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'"