【发布时间】:2020-12-27 04:39:56
【问题描述】:
我有一个程序,它将来自多台计算机的各种日志文件收集到客户端计算机上的单个 ZIP 文件中。它目前正在使用 Fabric,我想用 AsyncSSH 重写它,以使所有服务器并行发送它们的文件。
我想要弄清楚的是让文件通过 -- 作为流。我目前基于 Fabric 的代码是:
result = io.BytesIO()
connection.get(remote = path, local = result)
result.seek(0)
return result
当connection 是asyncssh.connect() 的结果时,等价物是什么?
【问题讨论】:
-
据我所见,asyncssh.connect 返回一个允许您执行命令的对象,例如
echo在示例中。所以只需执行日志文件的cat。您可以使用 asyncio.gathet 或 .wait 并行触发多个请求(请参阅here) -
我的意思是,对于每个源主机,您可以使用
result = io.StringIO(await conn.run('cat logfile"),但同时使用gather(假设您的日志文件是文本并且不是很大) -
我希望有一些通道/流的语义——这样,如果一个特定的文件是 large,它不需要被完全读入客户端的 RAM,但可以被
zipfile读取和压缩——in chunks...
标签: python-3.x async-await asyncssh