通过Netmiko登录Mellanox交换机执行ping命令卡住问题求助
问题原因
你遇到的卡住问题本质是Mellanox交换机默认ping命令会持续发送ICMP报文,不会自动终止,Netmiko的send_command方法默认会一直等待设备返回CLI提示符,命令未结束时不会返回,因此会进入假死状态,fast_cli配置仅调整命令发送速率和超时阈值,无法解决命令本身不终止的问题。
解决方案
- 方案1:给ping命令加次数限制(最推荐)
Mellanox Onyx操作系统的ping命令支持-c参数指定发送ICMP包的数量,执行完成后命令自动终止,无需额外处理即可正常获取结果。
代码示例:# 指定发送4个包后自动停止 ping_result = net_connect.send_command(f'ping {ilo_ip} -c 4') # 后续可通过返回结果中的丢包率字段(如0% packet loss)判断通断状态 - 方案2:手动执行无限制ping后主动中断
如果业务需要执行一段时间ping再停止,可搭配write_channel手动发送中断信号终止进程,再读取输出内容:import time # 写入ping命令 net_connect.write_channel(f'ping {ilo_ip}\n') # 等待ping执行指定时长 time.sleep(3) # 发送Ctrl+C对应的ASCII转义字符终止ping进程 net_connect.write_channel('\x03') # 读取全部执行输出 ping_result = net_connect.read_channel() - 额外注意事项
初始化ConnectHandler时需正确指定device_type为mellanox_onyx,错误的设备类型会导致提示符匹配异常,也可能引发命令执行卡住的问题。初始化示例:from netmiko import ConnectHandler dev_params = { "device_type": "mellanox_onyx", "host": "交换机管理地址", "username": "登录用户名", "password": "登录密码", "fast_cli": False } net_connect = ConnectHandler(**dev_params)
内容的提问来源于stack exchange,提问作者curious_21
相关产品推荐
相关产品推荐

