python - 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% 请回答“是”或“否”
其中,不应该是这样。它应该初始化用户执行模式“>”
有没有人在这种情况下有任何经验?有什么可以分享的经验教训吗?
解决方案
这个问题是由于对代码的疏忽造成的。
console.write(str('no \r\n').encode()) # 这个命令有一个额外的空白,这就是 Cisco 交换机没有使用它的原因。
谢谢
推荐阅读
- html - 内联网格相关的 CSS 在 Gmail 中消失
- powershell - 无法使用 .csv 文件的数据
- python - 对交集结果进行排序以保持最大长度仅在 python 中设置
- c - 将数据从文件X复制到文件Y C中的程序
- postgresql - Postgres 索引扫描表现不佳
- xslt-1.0 - 如何对每组节点满足特定条件的值求和使用 XSLT-1.0
- java - Android查找特定位置的区域数据
- go - 无法在 golang 网络应用程序中重定向。它坚持一页
- reactjs - Redux Dev Tools 不显示状态变化,action.payload 是 { }
- python - 无法加载 keras 训练的模型