2014-10-16 3 views
0

Пошел по странной проблеме.Кодирование с запросами в python

Я передаю словарь как часть запроса POST к CGI скрипт:

self.settings = { 
    'SubmitCommands': ['C:\Python27\python.exe path\my_script.py'] 
} 

Вот мой код:

settings = self.settings 

    # Make web call to CGI script 
    user_agent = r'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
    headers = {'User-Agent' : user_agent, "Accept": "text/plain"} 
    response = requests.post(
      "path\CGI\cgi_script.py", 
      headers=headers, data=settings) 

А вот полученный отслеживающий:

Traceback (most recent call last): 
    File "path\CGI\cgi_script.py", line 119, in initi 
alizeJob 
    self.submitCommands = eval(inputSubmitCommands) 
    File "<string>", line 1 
    C:\Python27\python.exe path\my_script.py 
    ^
SyntaxError: invalid syntax 

Однако, если я делаю это старомодным способом, я не получаю следы:

settings = self.settings 

    # Set and encode parameters 
    params = urllib.urlencode(settings) 

    # Make web call to CGI script 
    user_agent = r'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
    headers = {'User-Agent' : user_agent, 
       "Content-type": "application/x-www-form-urlencoded", 
       "Accept": "text/plain"} 
    conn = httplib.HTTPConnection(self.host) 
    conn.request("POST", "path/CGI/cgi_script.py", params, headers) 
    response = conn.getresponse() 

Ранее сегодня кто-то предупреждал меня о переполнении стека для сбора библиотеки только потому, что она новая. Похоже, я должен был их слушать. Однако мне все еще интересно, что пошло не так.

+0

Является ли параметр 'request.post' и' conn.request' фактическим путем? Или это URL? –

+0

Параметр - это путь. –

+0

Это очень странно. На моей машине, когда я пытаюсь использовать путь ('request.post ("/tmp/CGI/cgi_script.py ")'), я получаю 'MissingSchema: Invalid URL u '/ tmp/CGI/cgi_script.py': Нет схема поставляется'. –

ответ

2

Python интерпретирует обратную косую черту как escape-коды. Просто удвойте их, чтобы исправить это.

self.settings = { 
    'SubmitCommands': ['C:\\Python27\\python.exe path\\my_script.py'] 
} 
+0

или используйте необработанную строку r'C: \ Python27 ... ' – zmo

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