使用NETMIKO库访问华为设备时SSH获取大量数据异常问题
问题排查与解决
核心问题点
你误用了send_config_set()方法执行查询类命令(display开头),这个方法是专门用来发送配置命令的,会自动切换到设备的配置模式,而华为设备的查询命令需要在用户视图或特权视图下执行,这是导致大量数据获取异常的根本原因。
修正方案
- 替换命令执行方法:将
send_config_set()换成send_command()或send_command_timing(),这两个方法专门用于执行查询类命令,会保持在正确的视图下交互。 - 调整延迟参数:
global_delay_factor设为0.1过小,设备返回大量数据时可能出现接收不完整的情况,建议调至1或更高;同时可去掉手动指定的delay_factor,让Netmiko自动适配设备响应速度。 - 日志辅助排查:利用已开启的DEBUG日志,查看
test.log中的交互细节,确认设备是否返回了完整数据,或是存在超时、交互中断的情况。
修正后的代码
import logging logging.basicConfig(filename="test.log", level=logging.DEBUG) logger = logging.getLogger("netmiko") from netmiko import Netmiko # 补充原代码遗漏的导入语句 host1 = { "host": "Ip Address", "username": "user_name", "password": "password", "device_type": "huawei", "global_delay_factor": 1, # 调整延迟因子以适配大量数据返回 } net_connect = Netmiko(**host1) command1 = "display alarm active alarm-name MUT_LOS" # 单条查询命令无需用列表包裹 print("Connected to:", net_connect.find_prompt()) # 使用send_command执行查询命令 output = net_connect.send_command(command1) net_connect.disconnect() print(output)
额外建议
- 若需执行多条查询命令,可通过循环调用
send_command()实现,或使用send_multiline()方法批量发送。 - 当设备返回数据量极大时,可启用
use_textfsm=True参数(需提前安装textfsm库),将非结构化输出转换为结构化数据,同时避免大量文本处理引发的异常。
内容的提问来源于stack exchange,提问作者Hanif
相关产品推荐
相关产品推荐

