当前位置:首页>python>这 5 个 Python 库,让你的网络运维效率翻 10 倍

这 5 个 Python 库,让你的网络运维效率翻 10 倍

  • 2026-10-11 08:13:17
这 5 个 Python 库,让你的网络运维效率翻 10 倍

会用库的网工,一天干别人一周的活。

上一篇文章发了之后,后台收到不少留言:「我已经会用 Netmiko 连设备了,下一步学什么?」

问得好。

很多网工学 Python 的瓶颈不在语法,在「我不知道有哪些好用的库可以用」。每次遇到新需求,就想「是不是得从头写?」

不用。

网络自动化领域已经有一套成熟的工具链。这篇文章帮你一次性搞清楚。

第一把刀:Netmiko —— 网络设备的瑞士军刀

如果你只能学一个库,就学 Netmiko。

它是 Paramiko 的上层封装,专门为网络设备做 SSH 连接优化的。开箱支持思科、华为、H3C、Juniper、Arista 等几十个厂商。

from netmiko import ConnectHandlerdev = {    "device_type": "huawei_vrp",      "host": "10.1.1.1",    "username": "admin",    "password": "pass",}try:    with ConnectHandler(**dev) as conn:        print("===== 设备版本信息 =====")        print(conn.send_command("display version"))except Exception as e:    print("连接失败:", e)

Netmiko 帮你搞定了厂商之间的差异——思科的配置模式是 enable,华为是 system-view,这些它都自动处理。

适用场景:日常登录设备执行命令、配置备份、批量巡检。

第二把刀:NAPALM —— 厂商无关的网络抽象

Netmiko 的局限是:你发出的命令是厂商相关的。

思科 show ip interface brief,华为 display ip interface brief,H3C 又是另一种。你想写一个跨厂商的接口状态巡检脚本,就得写一堆 if-else。

NAPALM 解决了这个问题。

from napalm import get_network_driverdriver = get_network_driver("ios")# 设备信息device_ip = "10.1.1.1"username = "admin"password = "pass"try:    # 连接设备    with driver(device_ip, username, password, timeout=30) as dev:        print("=== 连接成功,开始获取信息 ===")        # 设备基本信息(主机名、型号、版本)        facts = dev.get_facts()        print("主机名:", facts["hostname"])        print("型号:", facts["model"])        print("版本:", facts["os_version"])        interfaces = dev.get_interfaces()        print("\n接口数量:", len(interfaces))        dev.discard_config()except Exception as e:    print("=== 连接/执行失败 ===")    print("失败原因:", str(e))

你告诉它设备驱动类型,它返回统一格式的数据。换厂商不用改代码逻辑。

另一个杀手功能是 compare_config():它能自动比对当前配置和你要下发的配置,只告诉你差异部分——变更窗口里能省大把时间。

适用场景:多厂商环境、配置比对、BGP/OSPF 状态监控。

第三把刀:ntc-templates —— 把 show 命令输出变成结构化数据

网工每天看这种东西:

Interface IP-Address      OK? Method StatusGigabitEthernet0/0 10.1.1.1        YES NVRAM  upGigabitEthernet0/1 unassigned      YES NVRAM  down

但如果你想在脚本里拿到「哪个接口是 down 的」,你得写正则去解析。

ntc-templates 说:不用了。

from netmiko import ConnectHandler device = {    "device_type": "cisco_ios",    "host": "10.1.1.1",    "username": "admin",    "password": "pass"}with ConnectHandler(**device) as conn:    output = conn.send_command("show ip interface brief", use_textfsm=True)for intf in output:    print(intf["intf"], intf["status"])

netmiko整合了textfsm和ntc-templates,use_textfsm=True 这个参数,背后就是 ntc-templates 在干活。它内置了上百个厂商命令的解析模板,输出自动变成 list of dict。

适用场景:任何需要结构化解析 CLI 输出的场景。

第四把刀:TextFSM —— 自定义解析,适配非标设备

ntc-templates 覆盖了主流厂商的主流命令,但有些场景它管不到:

• 某个厂商的非标输出格式

• 工控设备、安全设备等非网络设备

这时用 TextFSM 自己写模板。

#文件 1:show_int.template (模板文件)Value INTF (\S+)Value IPADDR (\S+)Value STATUS (up|down)Value PROTO (up|down)Start  ^${INTF}\s+${IPADDR}\s+${STATUS}\s+${PROTO} -> Record
#Python代码import textfsm# 模拟设备输出output = """Vlan1      192.168.1.1   up   upGigabit0/1  unassigned    down down"""# 加载模板with open("show_int.template") as tmpl:    parser = textfsm.TextFSM(tmpl)# 解析文本result = parser.ParseText(output)print(result)

写一次模板,永久复用。

适用场景:非标设备、特殊命令输出、工控/安全设备。

第五把刀:Paramiko —— 最灵活的底层

前面四个库底层都是 Paramiko。一般情况下你不需要直接用,但以下场景 Paramiko 无可替代:

• 跳板机:先 SSH 到堡垒机,再跳转到目标设备

• 交互式会话:设备 CLI 有分页或多级菜单

• 特殊认证:密钥 + 密码双因素、交互式 token

import paramikoimport time# 设备信息ip = "10.1.1.1"username = "admin"password = "pass"try:    # 创建SSH客户端    ssh = paramiko.SSHClient()    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())    # 连接设备(加超时,防止卡死)    ssh.connect(        hostname=ip,        username=username,        password=password,        port=22,        timeout=10    )    # 【关键】华为必须用交互式 shell    shell = ssh.invoke_shell()    time.sleep(1)    # 发送命令    shell.send("display version\n")    time.sleep(2)    # 读取输出    output = shell.recv(65535).decode("utf-8")    print(output)    # 关闭连接    ssh.close()except Exception as e:    print(f"连接失败:{str(e)}")

适用场景:跳板机环境、复杂交互、特殊认证需求。

选型速查

你的需求

用哪个

刚入门,想连设备

Netmiko

多厂商,想统一接口

NAPALM

想看结构化数据

ntc-templates + Netmiko

非标设备,需自定义解析

TextFSM

跳板机 / 特殊认证

Paramiko

大部分场景,Netmiko + ntc-templates 就够了。等你遇到多厂商环境再加 NAPALM。

· · ·

你平时最常用哪个库?有没有我没提到的宝藏工具?评论区分享给大家。

觉得有用?点个「在看」,转发给也在学自动化的同事。

后台回复「工具库」获取这 5 个库的速查卡片。

最新文章

随机文章