Вывод Python TTP (анализатор текста шаблона) не является правильным словаремPython

Программы на Python
Anonymous
Вывод Python TTP (анализатор текста шаблона) не является правильным словарем

Сообщение Anonymous »

Возможно, я делаю что-то неправильно, но используя выходные данные Netmiko от Cisco WLC в качестве входных данных для TTP, конечный результат не является настоящим словарем.
Шаг 1: Strong> Это мой скрипт:

Код: Выделить всё

with ConnectHandler(**device) as net_connect:
wlc_hostname = net_connect.find_prompt()[:-1]
data_to_parse = net_connect.send_command('show run | sec ^wlan.+_([0-9])+_GuestNet')
print (data_to_parse)

ttp_template = """


wlan {{ wlan_profile }} {{ wlan_id }} {{ ssid }}
security wpa psk set-key ascii {{ psk-encrp-method }} {{ guest-psk | ORPHRASE }}
shutdown  {{ state | set ("disabled") }}


"""

parser = ttp(data=data_to_parse, template=ttp_template)
parser.parse()

cisco_wlanTemplates = parser.result(structure="dictionary")
print(json.dumps(cisco_wlanTemplates, sort_keys=True, indent=4, separators=(',', ': ')))

for cisco_wlan in cisco_wlanTemplates:
print ('WLAN Profile: ',*cisco_wlan)

Это вывод Netmiko:

Код: Выделить всё

wlan GUEST_local 49 GuestSSID
assisted-roaming prediction
client association limit radio 31
description "Guest with local forwarding"
no security ft adaptive
security wpa psk set-key ascii 8 TaIQFQeIOPX^ZCIEbbggNLMiFNGSAYVBecRF
no security wpa akm dot1x
security wpa akm psk
no shutdown
Это результат анализатора:

Код: Выделить всё

{
"GUEST_wlan_profile": [
{
"GUEST_local": {
"guest-psk": "TaIQFQeIOPX^ZCIEbbggNLMiFNGSAYVBecRF",
"psk-encrp-method": "8",
"ssid": "GuestNet",
"wlan_id": "49"
}
}
]
}
Вот что я получаю при печати элементов словаря:

Код: Выделить всё

WLAN Profile:  G U E S T _ w l a n _ p r o f i l e
И вот что я получу, если попытаюсь получить первый элемент из предполагаемого вложенного словаря:
Код:

Код: Выделить всё

for cisco_wlan in cisco_wlanTemplates:
print ('WLAN Profile: ',cisco_wlan[0])
Выход:

Код: Выделить всё

WLAN Profile:  G
Шаг 2:[/b] Теперь, используя этот вывод, я получил другой результат для печати:
Код:

Код: Выделить всё

ttp_template = """


wlan {{ wlan_profile }} {{ wlan_id }} {{ ssid }}

security wpa psk set-key ascii {{ psk-encrp-method }} {{ guest-psk | ORPHRASE }}
shutdown  {{ state | set ("disabled") }}



"""

# create parser object and parse data using template:
parser = ttp(data=data_to_parse, template=ttp_template)
parser.parse()

cisco_wlanTemplates = parser.result(format='json')[0]
print(cisco_wlanTemplates)
Выход:

Код: Выделить всё

[
{
"GUEST_local": [
{
"ssid": "GuestNet",
"wlan_id": "49"
},
{
"guest-psk": "TaIQFQeIOPX^ZCIEbbggNLMiFNGSAYVBecRF",
"psk-encrp-method": "8"
}
]
}
]
По какой-то причине мне кажется, что на выходе TTP создается исходный словарь со списком слов, из которого я не знаю, как получить доступ к ключам и значениям.
С помощью TTP я хочу получить доступ к «guest-psk» для его изменения и в будущем изменить дополнительные функции из исходного вывода Netmiko, поэтому мне нужны вложенные словари, чтобы охватить все различные «профили WLAN». настройки на устройстве Cisco.
На этот раз я не хочу использовать для этого другой синтаксический анализатор или регулярное выражение.

Подробнее здесь: https://stackoverflow.com/questions/771 ... dictionary

Вернуться в «Python»