我有一个包含多个show命令的脚本,我希望根据接口值将它们合并到一个列表中
from MY_ATH import ME
from netmiko import ConnectHandler
import json
#Enter in the IP of the switch, username and password
IP = input('IP of switch: ')
username = ME['username']
password = ME['password']
SW = {
'ip': IP,
'username': username,
'password': password,
'device_type': 'cisco_ios',
}
net_connect = ConnectHandler(**SW)
#This script has hardcoded voice vlan info
#does this command and looks at the structured data
interfaces = net_connect.send_command('show interfaces switchport', use_textfsm=True)
#cdp = net_connect.send_command('show interfaces switchport', use_textfsm=True)
#cdp2 = net_connect.send_command('show interfaces description', use_textfsm=True)
#print(json.dumps(interfaces, indent=2))
#print(json.dumps(cdp3, indent=2))
interface_list = []
for interface in interfaces:
result={}
result["interface"] = interface['interface']
result["admin_mode"] = interface['admin_mode']
result["access_vlan"] = interface['access_vlan']
result["voice_vlan"] = interface['voice_vlan']
result["trunking_vlans"] = interface['trunking_vlans']
interface_list.append(result)
print (json.dumps(interface_list, indent=2))
interfaces1 = net_connect.send_command('show interfaces description', use_textfsm=True)
#print(json.dumps(interfaces1, indent=2))
interface_list1 = []
for interface in interfaces1:
result={}
result["interface"]=interface['port']
result["descrip"] = interface['descrip']
interface_list1.append(result)
print (json.dumps(interface_list1, indent=2))
interfaces2 = net_connect.send_command('show lldp neighbors detail', use_textfsm=True)
#print(json.dumps(interfaces2, indent=2))
interface_list2 = []
for interface in interfaces2:
result={}
result["interface"]=interface['local_interface']
result["neighbor"] = interface['neighbor']
interface_list2.append(result)
print (json.dumps(interface_list2, indent=2))
print(interface_list)
print(interface_list1)
print(interface_list2)
for key in interface_list:
print (key)
for key in interface_list1:
print (key)
for key in interface_list2:
print (key)
我得到的打印信息如下:
{'interface': 'Gi0/1', 'admin_mode': 'static access', 'access_vlan': '3216', 'voice_vlan': 'none', 'trunking_vlans': ['ALL']}
{'interface': 'Gi0/2', 'admin_mode': 'static access', 'access_vlan': '3216', 'voice_vlan': '2122', 'trunking_vlans': ['ALL']}
{'interface': 'Gi0/3', 'admin_mode': 'static access', 'access_vlan': '3216', 'voice_vlan': 'none', 'trunking_vlans': ['ALL']}
{'interface': 'Gi0/4', 'admin_mode': 'static access', 'access_vlan': '3216', 'voice_vlan': 'none', 'trunking_vlans': ['ALL']}
{'interface': 'Gi0/5', 'admin_mode': 'static access', 'access_vlan': '3216', 'voice_vlan': 'none', 'trunking_vlans': ['ALL']}
{'interface': 'Gi0/6', 'admin_mode': 'static access', 'access_vlan': '1035', 'voice_vlan': 'none', 'trunking_vlans': ['ALL']}
{'interface': 'Gi0/7', 'admin_mode': 'static access', 'access_vlan': '3216', 'voice_vlan': '2122', 'trunking_vlans': ['ALL']}
{'interface': 'Gi0/8', 'admin_mode': 'static access', 'access_vlan': '3216', 'voice_vlan': '2122', 'trunking_vlans': ['ALL']}
{'interface': 'Gi0/9', 'admin_mode': 'trunk', 'access_vlan': '1', 'voice_vlan': 'none', 'trunking_vlans': ['340,503,1001,1035,1500,2122,2430,3216,3350']}
{'interface': 'Gi0/10', 'admin_mode': 'trunk', 'access_vlan': '1', 'voice_vlan': 'none', 'trunking_vlans': ['503,1001,1115,1175,1177,2020,2122,2430,3216,3227']}
{'interface': 'Vl1', 'descrip': ''}
{'interface': 'Vl1001', 'descrip': ''}
{'interface': 'Gi0/1', 'descrip': 'Interface Gi0/1'}
{'interface': 'Gi0/2', 'descrip': 'Interface Gi0/2'}
{'interface': 'Gi0/3', 'descrip': 'Interface Gi0/3'}
{'interface': 'Gi0/4', 'descrip': 'Interface Gi0/4'}
{'interface': 'Gi0/5', 'descrip': 'Interface Gi0/5'}
{'interface': 'Gi0/6', 'descrip': 'Interface Gi0/6'}
{'interface': 'Gi0/7', 'descrip': 'Interface Gi0/7'}
{'interface': 'Gi0/8', 'descrip': 'Interface Gi0/8'}
{'interface': 'Gi0/9', 'descrip': 'to 501_2nd_10.0.1.20.ne.gov'}
{'interface': 'Gi0/10', 'descrip': 'to 0.0.1.20'}
{'interface': 'Gi0/9', 'neighbor': '501_2nd_10.0.1.20.ne.gov'}
{'interface': 'Gi0/2', 'neighbor': 'SEP08CCA7845AC3.nebraska.gov'}
{'interface': 'Gi0/1', 'neighbor': ''}
{'interface': 'Gi0/7', 'neighbor': ''}
{'interface': 'Gi0/5', 'neighbor': ''}
我想将所有这些合并成如下内容:
{'interface': 'Gi0/1',
'admin_mode': 'static access',
'access_vlan': '3216',
'voice_vlan': 'none',
'trunking_vlans': ['ALL'],
'descrip': 'Interface Gi0/1',
'neighbor': ''}
实现这一点的一种方法是使用接口作为键的字典,以及使用该接口的每个新结果更新的值作为内部字典
其中
results
如下所示:在您的脚本中,您可以将所有输出保存在一个列表中,并在最后进行组合,如我上面所示
另一种方法是创建一个函数,该函数将结果字典和要合并到其中的字典相结合,并在每次获得更多数据时执行。如果您有很多数据,并且不想一直保存到最后,这将非常有用
相关问题 更多 >
编程相关推荐