如何使用 python 和 pysftp 从一个 SFTP 流式传输到另一个 SFTP

How to stream from one SFTP to another SFTP using python and pysftp

我想将文件从一个 SFTP 服务器传输到另一个。

不想在本地写,也不想把整个文件读入内存

Pysftp 有 getfoputfo 方法。

但是 getfo 不会给你一个 reader -- 它只给一个打开的文件对象的写入。

我基本上想将 getfo 传送到一些可以读取的类似文件,因此我可以将其作为 putfo 的 reader 提供,以发送到目标。

伪代码:

buffer_obj = SomeBufferedIOReader()
source_sftp.getfo('/remote/path.txt.gz', buffer_obj)
target_sftp.putfo('/target/path.txt.gz', buffer_obj) # streaming commences

如果我在 bash 中这样做,我会创建一个 fifo 文件,异步写入 fifo,然后从该文件上传。当文件被上传时,fifo 将被耗尽并且进程将完成。不确定如何在 python.

中执行等效操作

好的...呃....pysftp 提供了一个open 方法。

with source_sftp.open('source/path.txt.gz', 'rb') as f:
    f.prefetch()
    target_sftp.putfo('target/path.txt.gz', f)