首页 > 解决方案 > Python3 Pyserial 和 Cisco 控制台

问题描述

我已经重用了一些 python 代码来通过串行控制台配置一个 cisco 交换机。这适用于 Python 2.7 版本,但自从迁移到 Python 3.x 后,它就停止了正常工作。我知道现在需要对字符串进行编码,以避免 Pyserial 由于 Python 3 中的更改而引发异常错误

“Python 3.0 使用文本和(二进制)数据的概念,而不是 Unicode 字符串和 8 位字符串。所有文本都是 Unicode;但是编码的 Unicode 表示为二进制数据。用于保存文本的类型是 str,用于保存文本的类型保持数据是字节。”

但是,似乎 cisco 交换机无法识别其发送的数据。

它再次适用于 Python 2.7,但由于 Python 3 的更改,我无法让脚本正常工作。

def readSerial(self, console):

    dataBytes = console.inWaiting()
    if dataBytes:
        return console.read(dataBytes)

    else:
        return ""
def checkStatus(self, console):

    console.write(str("\r\n\r\n").encode())
    time.sleep(1)

    prompt = self.readSerial(console)
    if str.encode('[yes/no]:') in prompt:
        console.write(str('no \r\n').encode()) # switch is not recognizing the encoded string sent via serial COM4 

        return True
    elif '#' in prompt:
        return True
    elif '>' in prompt:
        return True
    else:
        return False

使用 console.read() 方法,输出显示字符串 'no \r\n' 以字节为单位,但开关仍然询问初始设置配置问题:

您想进入初始配置对话框吗?[是/否]:\r\n% 请回答“是”或“否”

其中,不应该是这样。它应该初始化用户执行模式“>”

有没有人在这种情况下有任何经验?有什么可以分享的经验教训吗?

标签: pythonpyserialcisco

解决方案


这个问题是由于对代码的疏忽造成的。

console.write(str('no \r\n').encode()) # 这个命令有一个额外的空白,这就是 Cisco 交换机没有使用它的原因。

谢谢


推荐阅读