Python paramiko-1.16.0 readlines()解码错误
对于来自远程命令的格式异常的文本,执行相当标准的paramiko实现会在readlines()上返回decode error。我无法更改命令输出。如何编写代码以正确解码。请参见底部的解码错误文本: 正在使用的代码剪报:Python paramiko-1.16.0 readlines()解码错误,python,decode,paramiko,readlines,Python,Decode,Paramiko,Readlines,对于来自远程命令的格式异常的文本,执行相当标准的paramiko实现会在readlines()上返回decode error。我无法更改命令输出。如何编写代码以正确解码。请参见底部的解码错误文本: 正在使用的代码剪报: connect = paramiko.SSHClient() connect.connect(self.name, username = self.ruser, password = password,
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()
错误文本:
文件“./pylib/hosts/host.py”,第128行,cmdout=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中
如果self.\u标志和self.FLAG\u二进制else u(行)返回行
文件“/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。标准尝试:除了:包装器 怀疑只有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)