2013-12-13 8 views
0

У меня есть url, который содержит кучу амперсандов. У меня также есть cmd приведены нижеПроблемы с Wget с использованием подпроцесса python

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

Когда я запускаю команду, используя подпроцесса свои варианты URL-адреса после первого амперсанд не включаются в фактические запросы.

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

Что я могу сделать, чтобы убедиться, что весь URL передан?

ответ

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, используя одиночные кавычки:

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

Это работало. Благодарю. – abc

+0

@abc: не забудьте принять быстрый и правильный ответ! ;-) –

Смежные вопросы