Python ciscoconfparse 查找关闭接口和整个接口块?

问题描述

以下示例将使用取自 http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html#slide3

的此配置
! filename:exampleswitch.conf
!
hostname ExampleSwitch
!
interface GigabitEthernet 1/1
 switchport mode trunk
 shutdown
!
interface GigabitEthernet 1/2
 switchport mode access
 switchport access vlan 20
 switchport nonegotiate
 no cdp enable
!
interface GigabitEthernet 1/3
 no switchport
 ip address 192.0.2.1 255.255.255.0

这也是取自http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html#slide7

代码
from ciscoconfparse import CiscoConfParse

parse = CiscoConfParse('exampleswitch.conf',Syntax='ios')

for intf_obj in parse.find_objects_w_child('^interface','^\s+shutdown'):
    print("Shutdown: " + intf_obj.text)

输出

$ python script.py 
Shutdown: interface GigabitEthernet 1/1
$ 

代码运行良好。但不是只显示 Shutdown: interface GigabitEthernet 1/1,是否可以在输出显示整个 interface GigabitEthernet 1/1 块:

interface GigabitEthernet 1/1
 switchport mode trunk
 shutdown

解决方法

我猜你要找的是find_blocks

find_blocks(linespec,exactmatch=False,ignore_ws=False)。 找到与 linespec 匹配的所有兄弟姐妹,然后找到这些兄弟姐妹的所有父母 兄弟姐妹。返回按行号排序的配置行列表, 最低先

查看包含示例的 Ciscoconfparse API Documentation

所以我想它看起来像这样:

from ciscoconfparse import CiscoConfParse

parse = CiscoConfParse('exampleswitch.conf',syntax='ios')

for intf_obj in parse.find_blocks(r'^\sshutdown'):
      print(intf_obj)