问题描述
我正在尝试使用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)