连接失败后恢复 SFTP 下载(pysftp / paramiko)

Resume SFTP download after connection fails (pysftp / paramiko)

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

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

我在任一模块的文档中都找不到关于此的任何明确信息。 OpenSSH中有没有类似于reget命令的东西?

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

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)