Python 3.x AsyncSSH创建SFTP客户端错误-要解压缩的值太多

Python 3.x AsyncSSH创建SFTP客户端错误-要解压缩的值太多,python-3.x,async-await,sftp,python-asyncio,sanic,Python 3.x,Async Await,Sftp,Python Asyncio,Sanic,我正在Sanic应用程序(运行Asyncio事件循环)中使用asyncssh库来创建SFTP客户端连接。在我的代码中,我正在这样做: class MyClass: async def connect(self, host, username, password, port): return await asyncssh.connect(host=host, port=port, username=username, password=password, known_hos

我正在Sanic应用程序(运行Asyncio事件循环)中使用asyncssh库来创建SFTP客户端连接。在我的代码中,我正在这样做:

class MyClass:
    async def connect(self, host, username, password, port):
        return await asyncssh.connect(host=host, port=port, username=username, password=password, known_hosts=None)

    async def establish_sftp_client(self, conn):
        return await conn.start_sftp_client()

    # This is my invoker:
    async def create_connection(self, <some args>):
        conn = await self.connect()
        sftp_client = await self.establish_sftp_client(conn)
        ...
        return conn, sftp_client

在代码库中到处都放日志语句之后,终于找到了这个问题的根本原因。这些行隐藏在一些模糊的文件中:

@asyncio.coroutine
def open_session(self, *args, **kwargs):            
    chan, session = yield from self.create_session(CoreSSHClientStreamSession,
                                                   *args, **kwargs)

    return (asyncssh.stream.SSHWriter(session, chan), asyncssh.stream.SSHReader(session, chan),
            asyncssh.stream.SSHReader(session, chan, asyncssh.constants.EXTENDED_DATA_STDERR))


asyncssh.SSHClientConnection.open_session = open_session
最后一行覆盖了asyncssh中的open_会话方法

import asyncssh, asyncio

async def x():
    conn = await asyncssh.connect(host='<host'>, username='some name', password='some pass', port=22, known_hosts=None)
    sftp = await conn.start_sftp_client()
    print("sftp {}".format(sftp)) # This works!

asyncio.get_event_loop().run_until_complete(x())
@asyncio.coroutine
def open_session(self, *args, **kwargs):            
    chan, session = yield from self.create_session(CoreSSHClientStreamSession,
                                                   *args, **kwargs)

    return (asyncssh.stream.SSHWriter(session, chan), asyncssh.stream.SSHReader(session, chan),
            asyncssh.stream.SSHReader(session, chan, asyncssh.constants.EXTENDED_DATA_STDERR))


asyncssh.SSHClientConnection.open_session = open_session