You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:27:04