Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 29, 2015 15:43:04

fehu
Зарегистрирован: 2015-09-21
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как распарсить выдачу ssh

Есть скрипт который подключается по ssh к комутатору и запрашивает таблицу мак адресов.
Выводит следующее

ES-2108-G# 7show mac address-table all 
777777777777777777777777777Port VLAN ID MAC Address Type
5 1 e8:03:9a:18:be:91 Dynamic
ES-2108-G# 7

А вопрос такой: Как мне это дело распарсить и каждое значение забрать в отдельную переменную списка? Т.е все что ниже Port будет браться в одноименную переменную и т.д

Офлайн

#2 Ноя. 29, 2015 17:09:54

fehu
Зарегистрирован: 2015-09-21
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как распарсить выдачу ssh

Смог реализовать через регулярки, но слишком топорно все получилось, как можно более лаконично и красиво сделать?

import re
output = '''
ES-2108-G# 7show mac address-table all 
777777777777777777777777777Port      VLAN ID        MAC Address         Type      
5         1              e8:03:9a:18:be:91   Dynamic
2         1              e8:01:9a:18:be:b1   Dynamic  
3         1              e8:06:9a:18:be:g1   Dynamic  
7         1              e8:07:9a:18:be:a1   Dynamic  
ES-2108-G# 7
'''
ids = []
macs = []
pattern = re.compile(
    r'(([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.))')
result = pattern.findall(output)
for r in result:
    for x in r:
        if len(x) > 5:
            macs.append(x)
for m in macs:
    print m
pattern2 = re.compile("(\n\d)")
result2 = pattern2.findall(output)
for r in result2:
    ids.append(r)
for i in ids:
    print i

Отредактировано fehu (Ноя. 29, 2015 17:10:20)

Офлайн

#3 Ноя. 30, 2015 00:36:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как распарсить выдачу ssh

>>> text = """\
... Port      VLAN ID        MAC Address         Type      
... 5         1              e8:03:9a:18:be:91   Dynamic
... 2         1              e8:01:9a:18:be:b1   Dynamic  
... 3         1              e8:06:9a:18:be:g1   Dynamic  
... 7         1              e8:07:9a:18:be:a1   Dynamic  
... """
>>> 
>>> it = iter(text.splitlines())
>>> next(it)
'Port      VLAN ID        MAC Address         Type      '
>>> lst = list(map(str.split, it))
>>> lst
[['5', '1', 'e8:03:9a:18:be:91', 'Dynamic'], ['2', '1', 'e8:01:9a:18:be:b1', 'Dynamic'], ['3', '1', 'e8:06:9a:18:be:g1', 'Dynamic'], ['7', '1', 'e8:07:9a:18:be:a1', 'Dynamic']]
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version