Netmiko多设备连接脚本报错求助:TypeError问题排查
问题分析与解决
错误原因
- 函数
get_interface定义中使用**kwargs,这是用于接收可变数量的关键字参数(键值对形式),但你调用时传入的cisco_ios是一个列表,属于位置参数,导致参数数量不匹配,触发第一个TypeError。 - 当你尝试用
**cisco_ios调用时,**操作符要求其后必须是字典(映射类型),但cisco_ios是列表,因此触发第二个TypeError。
修正后的代码
from netmiko import ConnectHandler cisco_ios = [] sandbox_cisco = { "device_type": "cisco_ios", "host": "sandbox-iosxe-latest-1.cisco.com", "port": "22", "username": "developer", "password": "C1sco12345" } cisco_ios.append(sandbox_cisco) # 注意:IOS XR设备的device_type应改为"cisco_xr",避免后续连接问题 sandbox_cisco_2 = { "device_type": "cisco_xr", "host": "sandbox-iosxr-1.cisco.com", "port": "22", "username": "admin", "password": "C1sco12345" } cisco_ios.append(sandbox_cisco_2) command = "show interfaces description" # 修改函数参数,直接接收设备列表 def get_interface(command, devices): for ne in devices: net_connect = ConnectHandler(**ne) comando = net_connect.send_command(command) net_connect.disconnect() print(comando) # 直接传入命令和设备列表 get_interface(command, cisco_ios)
关键修正点
- 函数参数从
**kwargs改为devices,使其能够接收设备列表作为位置参数。 - 遍历
devices列表中的每个设备字典,用**ne解包字典为Netmiko所需的关键字参数。 - 修正了第二个设备的
device_type为cisco_xr(IOS XR设备对应的类型),避免后续可能的连接失败问题。
内容的提问来源于stack exchange,提问作者Martin Barbieri
相关产品推荐
相关产品推荐

