ValueError: неподдерживаемый символ формата '{' (0x7b) с индексом 40 - Python & CURL - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь создать программу, которая может анализировать скорость работы сайта в терминале. Я использовал модуль curl для обработки команды в Linux оболочке. Но я получаю следующую ошибку:

ValueError: unsupported format character '{' (0x7b) at index 40

import subprocess

def webSpeed():
    website = raw_input("Enter name of the website:  ")
    print(website)
    cmd = "curl -s -w 'Website Response Time for :%{url_effective}\n\nLookup Time:\t\t%{time_namelookup}\nConnect Time:\t\t%{time_connect}\nAppCon Time:\t\t%{time_appconnect}\nRedirect Time:\t\t%{time_redirect}\nPre-transfer Time:\t%{time_pretransfer}\nStart-transfer Time:\t%{time_starttransfer}\n\nTotal Time:\t\t%{time_total}\n' -o /dev/null https://%s" %(webiste)
    print(cmd)
    temp = subprocess.call(cmd, shell="TRUE")
    print(temp)

Как добавить команды скручивания в python, если используются фигурные скобки?

1 Ответ

1 голос
/ 26 февраля 2020

Когда вы делаете

string % format_values

Тогда каждое % в строке рассматривается как место форматирования. Python нашел %{ и был сбит с толку - он ожидал %d для размещения целых чисел или %s для размещения строк, или что-то еще, что ему известно. Но форматирование кода не использует %{ для любого формата - таким образом, ошибка. Если вы хотите написать %, который не имеет значения для форматирования, вы должны экранировать его другим %.

Поэтому есть два решения:

  1. либо измените все% ( кроме последнего %s) с %%
  2. или не используйте string % format_values, а просто добавьте веб-сайт к своей команде, поскольку, к счастью, он в конце

Правильный и неправильный код примеры:

website = "lukaszslusarczyk.pl"
cmd1 = "curl -s -w 'Response Time for %%{url_effective}\t%%{time_connect}\n' -o /dev/null https://%s" % website # OK                                                                                                                  
cmd2 = "curl -s -w 'Response Time for %{url_effective}\t%{time_connect}\n' -o /dev/null https://" + website # OK                                                                                                                      
cmd3 = "curl -s -w 'Response Time for %{url_effective}\t%{time_connect}\n' -o /dev/null https://%s" % website # wrong
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...