做一个相当标准的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()
错误文字:
文件"../pylib/hosts/host.py",第128行,cmd
out = stdout.readlines()
在readlines中文件"/usr/local/lib/python3.4/site-packages/paramiko/file.py",第285行
line = self.readline()
文件"/usr/local/lib/python3.4/site-packages/paramiko/file.py",第270行,在readline中
返回行如果self._flags&self.FLAG_BINARY否则u(行)
档案"/usr/local/lib/python3.4/site-packages/paramiko/py3compat.py",第148行,
在你返回s.decode(编码)
UnicodeDecodeError:'utf-8' codec无法解码位置80中的字节0xe2:无效的连续字节
1 回答
好吧,我修改了python 3的paramiko.py3compat“u”方法 . (没有修改python 2版本)如果utf8解码失败,请尝试ISO-8859-1 . 标准尝试:除了:包装器 .
怀疑这个问题只发生在Python 3上 . 本来很高兴覆盖py3compay.pt u()方法而不是修改paramiko库文件,但需要继续解决这个问题 .
这是我修补到py3compat.py中的新u()方法: