2013-12-13 96 views
0

我有一個url,它包含一堆&符。 我也有一個cmd低於Wget使用python子進程的問題

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

給予當我運行使用子我的網址選項後的第一個符號沒有在實際查詢包含的命令。

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

我該怎麼做才能確保整個網址通過?

回答

1

我已經試圖找出如何格式化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

嘗試使用單引號引用的網址:

url = "'what&ever&address'" 
+0

這工作。謝謝。 – abc

+0

@abc:不要忘記接受一個快速和正確的答案! ;-) –