【发布时间】:2019-10-08 05:14:21
【问题描述】:
我已经重用了一些 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' 以字节为单位,但 switch 仍然询问初始设置配置问题:
您想进入初始配置对话框吗? [是/否]:\r\n% 请回答“是”或“否”
不应该这样。它应该初始化用户执行模式">"
有没有人有这种情况的经验?有什么可以分享的经验教训吗?
【问题讨论】: