使用Python Netmiko连接txt文件多台Cisco设备的代码可行性咨询
代码问题排查与修正
你的代码存在多处语法、逻辑错误,无法正常运行,具体问题及修改方案如下:
存在的问题
- 导入缺失:没有提前导入netmiko库的
ConnectHandler类,运行时会触发未定义引用报错 - 函数调用顺序错误:你先调用了
local_login()函数,之后才定义该函数,Python执行时会报函数未定义错误 - 拼写错误:读取的文件名写为
devcies.txt,大概率是devices.txt的拼写错误,会触发文件找不到报错 - for循环缩进错误:循环体内的
local_login(ip)、print(ip)没有缩进,不属于循环执行的代码,只会执行一次 - IP地址带多余空白:
readlines()读取到的每行内容末尾自带换行符\n,直接传入SSH连接会导致IP识别失败 - 函数参数语法错误:
def local_login('ipaddr'):中参数名是变量,不能加引号,属于语法错误 - 凭证未加引号:用户名、密码、enable密码的值是字符串类型,必须用单/双引号包裹,否则Python会识别为未定义变量报错
- 缩进不规范:函数内部的代码缩进不统一,Python对缩进要求严格,会触发缩进错误
- 缺少异常处理:连接设备失败时没有容错逻辑,单台设备连接失败会导致整个脚本崩溃
- (可选)文件资源管理不规范:手动调用
Host.close()如果中途报错会导致文件句柄未正常释放,建议用with语句管理文件
修正后可运行的代码
# 前置导入所需类 from netmiko import ConnectHandler # 先定义函数,再调用 def local_login(ipaddr): devlist = { 'device_type': 'cisco_ios', 'ip': ipaddr, 'username': 'klsdjfglkfj', # 字符串内容加引号 'password': 'yyyyyyyy', # 字符串内容加引号 'secret': 'xxxxxxx', # 字符串内容加引号 } # 添加异常处理避免单台设备故障导致脚本崩溃 try: net_connect = ConnectHandler(**devlist) # 如果需要进入enable模式可开启下一行 # net_connect.enable() print(f"设备{ipaddr}连接成功") # 此处可添加需要执行的命令逻辑 # 示例:output = net_connect.send_command('show run | inc hostname') # print(output) # 会话使用完成后主动关闭 net_connect.disconnect() except Exception as e: print(f"设备{ipaddr}连接失败,错误信息:{e}") if __name__ == "__main__": # 用with语句管理文件,自动释放文件句柄 with open('devices.txt','r') as f: devices = f.readlines() for ip in devices: # 去掉首尾空白字符和换行符 ip = ip.strip() # 跳过文件中的空行 if not ip: continue local_login(ip) print(ip)
内容的提问来源于stack exchange,提问作者alwynram
相关产品推荐
相关产品推荐

