问题描述
以下示例将使用取自 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)