Python paramiko-1.16.0 readlines()解码错误

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,

对于来自远程命令的格式异常的文本,执行相当标准的paramiko实现会在readlines()上返回decode error。我无法更改命令输出。如何编写代码以正确解码。请参见底部的解码错误文本:

正在使用的代码剪报:

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行,cmd
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中
如果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)