首页 > 解决方案 > 连接失败后恢复 SFTP 下载(pysftp / paramiko)

问题描述

我正在尝试使用 pysftp / paramiko 构建一个简单的 SFTP 客户端。

如果传输中断(例如连接失败),我如何恢复传输?有没有办法重新开始传输,发现文件已经存在,然后从中断点开始传输更多数据?

我在这两个模块的文档中都找不到任何明确的信息。有没有类似于regetOpenSSH 中的命令的东西?

标签: pythonsftpparamikopysftp

解决方案


Paramiko 和 pysftp 都不支持传输恢复。但是如果你看一下SFTPClient.get实现,应该很容易实现简历。以下应该做:

if os.path.isfile(localpath):
    localsize = os.stat(localpath)
else
    localsize = 0
remotesize = sftp.stat(remotepath).st_size
if localsize < remotesize:
    with open(localpath, "ab") as fl,
         sftp.open(remotepath, "rb") as fr:
        if localsize > 0:
            fr.seek(localsize)
        fr.prefetch(remotesize)
        sftp._transfer_with_callback(
            reader=fr, writer=fl, file_size=remotesize, callback=None)

推荐阅读