连接失败后恢复 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)
我正在尝试使用 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)