gpt4 book ai didi

python - paramiko-1.16.0 readlines() 解码错误

转载 作者:行者123 更新时间:2023-12-01 04:13:46 25 4
gpt4 key购买 nike

对于来自远程命令的奇怪格式的文本,执行相当标准的 paramiko 实现会在 readlines() 上返回解码错误。我无法更改命令输出。我怎样才能编写代码才能正确解码。请参阅底部的解码错误文本:

正在使用的代码片段:

connect = paramiko.SSHClient()
connect.connect(self.name,
username = self.ruser,
password = password,
key_filename = idkey,
timeout = 15,
)
stdin, stdout, stderr = connect.exec_command(cmd)
retval=stdout.channel.recv_exit_status()
stdin.flush()
stdout.flush()
stderr.flush()
out = stdout.readlines()
sys.exit()

错误文本:

cmd 中的文件“../pylib/hosts/host.py”,第 128 行
out = stdout.readlines()
文件“/usr/local/lib/python3.4/site-packages/paramiko/file.py”,第 285 行,在 readlines
line = self.readline()
文件“/usr/local/lib/python3.4/site-packages/paramiko/file.py”,第 270 行,在 readline
返回行 if self._flags & self.FLAG_BINARY else u(line)
文件“/usr/local/lib/python3.4/site-packages/paramiko/py3compat.py”,第 148 行,
在 u 中 返回 s.decode(编码)
UnicodeDecodeError:“utf-8”编解码器无法解码位置 80 中的字节 0xe2:无效的连续字节

最佳答案

嗯,我修改了python 3的paramiko.py3compat“u”方法。(没有修改python 2版本)如果utf8解码失败,请尝试ISO-8859-1。标准尝试:异常(exception):包装器。

怀疑此问题仅出现在 Python 3 中。如果能覆盖 py3compay.pt u() 方法而不是修改 paramiko 库文件就好了,但需要解决此问题。

这是我修补到 py3compat.py 中的新 u() 方法:

def u(s, encoding='utf8'):
"""cast bytes or unicode to unicode"""
if isinstance(s, bytes):
try:
return s.decode(encoding)
except UnicodeDecodeError:
return s.decode('ISO-8859-1')
elif isinstance(s, str):
return s
else:
raise TypeError("Expected unicode or bytes, got %r" % s)

关于python - paramiko-1.16.0 readlines() 解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com