You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:36:07