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

如何从pexpect获取的思科设备输出中提取指定版本信息并解决类型报错?

错误原因

  • pexpect返回的session.before内容为bytes字节类型(输出项前带b前缀即为bytes类型标识),调用bytes类的strip()方法时只能传入bytes类型参数,你传入了字符串类型的"'",因此触发TypeError类型不匹配报错。
  • 硬编码下标取列表第4个元素的写法兼容性较差,不同型号、不同系统版本的思科设备执行show version的输出结构可能有差异,容易出现下标越界或取错内容的问题。

解决方案

快速修复原有代码

如果确认你的目标设备输出结构固定,可以直接将bytes转成字符串后再处理:

def get_version_info(session):
    session.sendline('show version | include Version')
    # 同时匹配用户模式>和特权模式#,避免触发超时
    result = session.expect(['#', '>', pexpect.TIMEOUT])
    version_output_lines = session.before.splitlines()
    # 先转成utf-8字符串,再提取版本内容
    target_line = version_output_lines[4].decode('utf-8', errors='ignore')
    version = target_line.split(', Version ')[1].split(',')[0]
    version = f"Version {version}"
    print("--- got version: ", version)
    return version

更稳妥的通用方案(推荐)

使用正则匹配直接抓取目标格式的版本信息,不受输出行数、输出位置的影响:

import re
import pexpect

def get_version_info(session):
    session.sendline('show version | include Version')
    result = session.expect(['#', '>', pexpect.TIMEOUT])
    output = session.before.decode('utf-8', errors='ignore')
    # 正则匹配 Version 加数字.数字.数字格式的内容
    version_match = re.search(r'Version \d+\.\d+\.\d+', output)
    if version_match:
        version = version_match.group()
        print("--- got version: ", version)
        return version
    print("--- 未匹配到有效版本信息")
    return None

上述代码运行后会直接提取你需要的Version 16.9.2内容,自动过滤其他无关的版本信息(比如IOS XE的版本、GPL协议的版本号)。

内容的提问来源于stack exchange,提问作者olg32

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:45:04