Я хочу перенести файлы с одного SFTP-сервера на другой.
Я не хочу писать локально и не хочу читать весь файл в память.
Pysftp имеет методы getfo
и putfo
.
Но getfo
не дает вам читателя - он просто записывает в открытый файл obj.
По сути, я хочу передать getfo
по конвейеру какому-то подобному файлу, из которого можно читать, поэтому я могу предоставить его в качестве читателя для putfo
, чтобы отправить его в цель.
Псевдокод:
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 будет исчерпан, и процесс завершится. Не уверен, как сделать эквивалент в Python.