Найти - Пользователи
Полная версия: Как распарсить выдачу ssh
Начало » Python для новичков » Как распарсить выдачу ssh
1
fehu
Есть скрипт который подключается по 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 будет браться в одноименную переменную и т.д
fehu
Смог реализовать через регулярки, но слишком топорно все получилось, как можно более лаконично и красиво сделать?
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
py.user.next
>>> 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']]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB