Первый раз публикуя текущие сведения о Python.
В настоящее время я застрял на очень простой вещи: у меня есть вывод маршрутизатора - список, называемый "интерфейсами" - который при печати выглядит следующим образом:
set interfaces ge-0/0/0 unit 0 family inet address 192.168.15.66/24
set interfaces ge-0/0/1 unit 0 family inet dhcp
set interfaces ge-0/0/2 unit 0 family inet address 1.1.1.1/30
set interfaces ge-0/0/2 unit 0 family inet address 192.168.99.1/30
Используя модуль re (findall), я нахожу и сопоставляю некоторые ключевые слова, которые мне нужны, например:
pattern1 = re.compile(r'ge.{1,7}')
pattern2 = re.compile(r'dhcp')
matched1 = pattern1.findall(interfaces)
matched2 = pattern2.findall(interfaces)
На данный момент вопрос is: Если строка (?) этого выхода маршрутизатора содержит слово «dhcp», я хотел бы сохранить / сохранить это значение и получить имя / номер интерфейса тоже. В приведенном выше примере интерфейс, содержащий «dhcp», представляет собой «ge-0/0/1». Ребята, у вас есть идея, если я иду по правильному пути?
- Полезна ли модель (получить два регулярных выражения), чтобы затем объединить оба значения в словарь, а затем распечатать с помощью return?
- Как можно проанализировать остальные строки кода маршрутизатора, чтобы найти это значение "dhcp", а затем, если никакое совпадение не может вернуть вывод "none" или "not present"?
Ожидаемый вывод будет выглядеть следующим образом (я использую «табулирование возврата», чтобы напечатать вывод):
| interface | service |
|-------------+------------|
| ge-0/0/0 | none |
| ge-0/0/1 | dhcp |
| ge-0/0/2 | none |
Любые указания будут приветствоваться. Спасибо.
РЕДАКТИРОВАТЬ: Спасибо оба за ваши ответы до сих пор. Я добавляю больше информации, так как, вероятно, это ключ. То, как я получаю этот маршрутизатор, использует встроенные модули SaltStack. Я запускаю этот файл python из Salt Master, используя следующий синтаксис:
interfaces = __salt__['net.cli']('show configuration interfaces | display set', format='xml')['out']['show configuration interfaces | display set']
Я искренне надеюсь, что вывод на самом деле является списком.
Тем временем я сделал еще одну попытку, используя следующее:
def dhcp():
interfaces = __salt__['net.cli']('show configuration interfaces | display set', format='xml')['out']['show configuration interfaces | display set']
pattern = re.findall(r'ge.{1,7}', interfaces)
pattern1 = re.findall(r'dhcp', interfaces)
return pattern, pattern1
Вывод был такой:
outright ~ sudo salt 'vsrx1' red.dhcp
vsrx1:
|_
- ge-0/0/0
- ge-0/0/0
- ge-0/0/0
- ge-0/0/0
- ge-0/0/1
- ge-0/0/2
- ge-0/0/2
|_
- dhcp
Печать только списка (с помощью -> return ("List is:" + str ( шаблон)))
outright ~ sudo salt 'vsrx1' red.dhcp
vsrx1:
List is: ['ge-0/0/0 ', 'ge-0/0/0 ', 'ge-0/0/0 ', 'ge-0/0/0 ', 'ge-0/0/1 ', 'ge-0/0/2 ', 'ge-0/0/2 ']
Прошу прощения, если путь к express технически беден. Я все еще изучаю терминологию в целом.