如何将记事本中的设备数据导入Python字典供Netmiko连接设备使用
问题解决方法
你原代码的核心问题是:使用file.read().split()会把整个文件的所有空白(包括换行、空格)都作为分隔符,拆分后得到的是所有元素平铺的列表,循环时会把admin也当成ip传入,完全不符合预期。
另外netmiko连接必须指定device_type参数,你原来的字典里漏了这个配置,会直接连接失败,常见设备类型对应值:思科IOS填cisco_ios、华为填huawei、H3C填hp_comware,可根据你实际的设备调整。
完整可运行代码
import netmiko desktop = "C:\\Users\\Dawid\\Desktop\\" device_list = [] # 读取设备文件生成配置列表 with open(desktop + "devices.txt", 'r', encoding='utf-8') as file: # 逐行读取,跳过空行 for line in file: line = line.strip() if not line: continue # 按空格拆分最多2次,适配密码带空格的场景 ip, username, password = line.split(maxsplit=2) device_info = { 'device_type': 'cisco_ios', # 替换为你实际的设备类型 'ip': ip, 'username': username, 'password': password } device_list.append(device_info) # 循环连接设备 for dev in device_list: try: conn = netmiko.ConnectHandler(**dev) print(f"{dev['ip']} 连接成功") # 此处添加你要执行的设备操作逻辑 conn.disconnect() except Exception as e: print(f"{dev['ip']} 连接失败,错误信息:{e}")
如果你确定所有设备的账号密码都是固定的admin,也可以简化读取逻辑,只从文件取IP即可:
with open(desktop + "devices.txt", 'r', encoding='utf-8') as file: for line in file: ip = line.strip().split()[0] if not ip: continue device_info = { 'device_type': 'cisco_ios', 'ip': ip, 'username': 'admin', 'password': 'admin' } device_list.append(device_info)
运行前请确保已经安装netmiko依赖:pip install netmiko
内容的提问来源于stack exchange,提问作者typovy
相关产品推荐
相关产品推荐

