第一次发布关于 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)
此时,问题是:如果此路由器输出的行(?)包含单词“dhcp”,我想保存/存储该值并获取接口名称/编号。在上面的示例中,包含“dhcp”的接口是“ge-0/0/1”。如果我走在正确的道路上,你们知道吗?
- 模型(获取两个正则表达式)是否有用,然后将两个值合并到字典中,然后使用 return 打印?
- 如何解析其余的路由器代码行,以查找此“dhcp”值,然后如果没有匹配可以返回“无”或“不存在”输出?
预期的输出将如下所示(我使用“返回表格”来打印输出):
| interface | service |
|-------------+------------|
| ge-0/0/0 | none |
| ge-0/0/1 | dhcp |
| ge-0/0/2 | none |
任何指导,将受到欢迎。谢谢。
编辑:到目前为止,感谢您的回答。我正在添加更多信息,因为可能是关键。我获得路由器输出的方式是使用 SaltStack 集成模块。我正在使用以下语法从 Salt Master 运行该 python 文件:
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(pattern)) )
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 ']
如果表达问题的方式在技术上很差,我深表歉意。我仍在学习一般术语。