刚接手一批老旧网络设备,每天手动登录十来台路由器查接口状态、清ARP、抓包分析——干到第三天,手抖着敲错命令把某分支网点的VLAN删了。后来咬牙写了段Python脚本,10秒跑完原来半小时的活,还顺手加了错误回滚和日志记录。
别硬敲,先搭骨架
写脚本前花两分钟画个流程图:输入是什么(IP列表?CSV?)、中间要调哪些命令(ssh、ping、snmpwalk)、输出存哪(屏幕?Excel?邮件?)。骨架定了,后面填代码就像往格子里填字,不卡壳。比如批量检查交换机端口UP/DOWN状态,骨架就是:读取设备列表 → 逐台SSH登录 → 执行。show interface status → 提取关键字段 → 汇总成表格
善用现成轮子,别重造螺丝刀
Netmiko、Nornir、TextFSM 这些库不是摆设。拿Netmiko举个例子,三行代码搞定多厂商设备登录:
from netmiko import ConnectHandler
device = {"device_type": "cisco_ios", "host": "192.168.1.1", "username": "admin", "password": "pass"}
conn = ConnectHandler(**device)比自己用paramiko从头处理telnet/ssh握手、密码交互、命令等待提示符省心太多。遇到华为或H3C设备?换device_type值就行,不用改逻辑。
把重复操作“钉”进函数里
发现连续三次都在写if 'up' in output: print('OK')?立刻抽成函数:
def check_port_up(output):
return 'up' in output.lower() and 'admin down' not in output.lower()下次查光模块温度、BGP邻居状态,直接复用这个判断逻辑,改的只是传进去的字符串。
日志比print好使十倍
别再满屏print('正在连接...') → print('执行完成') → print('结果:xxx')。用Python logging模块,一行开关调试模式:
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logging.info(f'已处理{len(devices)}台设备')出问题时翻日志文件,时间、级别、上下文全在,不用猜哪步挂了。
小脚本也配个配置文件
把IP地址、超时时间、用户名这些硬编码全挪进config.yaml里:
devices:
- host: 192.168.1.1
type: cisco_ios
- host: 192.168.1.2
type: huawei_vrp
timeout: 10换测试环境?改配置文件就行,代码一动不动。运维同事接手时也不用翻源码找IP,打开yaml就明白怎么调。
脚本不是越长越厉害,是越少出错、越容易改、越敢半夜被叫起来跑一次才真有用。