如何使用 python 和 pysftp 从一个 SFTP 流式传输到另一个 SFTP
How to stream from one SFTP to another SFTP using python and pysftp
我想将文件从一个 SFTP 服务器传输到另一个。
不想在本地写,也不想把整个文件读入内存
Pysftp 有 getfo
和 putfo
方法。
但是 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)
我想将文件从一个 SFTP 服务器传输到另一个。
不想在本地写,也不想把整个文件读入内存
Pysftp 有 getfo
和 putfo
方法。
但是 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)