Python3.7操作Cisco IOS-XR无法执行ls、df等bash命令问题咨询
Cisco IOS-XR 通过netmiko执行bash命令解决方案
你当前使用的netmiko库已经可以实现需求,不需要额外引入其他库。之前的错误是因为subprocess.run是执行本地操作系统命令的接口,完全不涉及和远程路由器的交互。
核心原理是:执行run进入bash环境后,默认netmiko只会匹配IOS-XR原生CLI提示符,无法识别bash的$提示符,需要通过expect_string参数手动指定期望匹配的结束标志即可。
完整可运行代码示例
from netmiko import ConnectHandler Network_Device = { "host": "10.111.22.333", "username": "USER123", "password": "Pass123", "device_type": "cisco_xr", } # 建立设备连接并进入enable模式 conn = ConnectHandler(**Network_Device) conn.enable() # 执行run命令进入bash,指定匹配bash提示符末尾的$符号 conn.send_command("run", expect_string=r"\$") # 执行bash下的df命令 df_result = conn.send_command("df", expect_string=r"\$") print("===== df命令执行结果 =====") print(df_result) # 执行bash下的ls命令 ls_result = conn.send_command("ls -l", expect_string=r"\$") print("\n===== ls命令执行结果 =====") print(ls_result) # 所有bash命令执行完成后,退出bash回到IOS-XR原生CLI conn.send_command("exit", expect_string=conn.base_prompt) # 关闭连接 conn.disconnect()
注意事项
expect_string参数支持正则匹配,r"\$"的写法是为了匹配提示符末尾的$符号,加r标记为原生字符串避免转义冲突- 如果需要更高匹配精度,可以替换为你实际环境的bash提示符特征,比如你示例中的场景可以写为
expect_string=r"\[xr-vm_node0_RP0_CPU0:~\]\$" - 所有bash操作完成后必须执行
exit退回IOS-XR原生CLI,否则后续执行XR原生命令会出现提示符匹配错误
内容的提问来源于stack exchange,提问作者Amit Bansal
相关产品推荐
相关产品推荐

