【发布时间】:2020-12-25 05:04:36
【问题描述】:
我正在尝试使用 pysftp / paramiko 构建一个简单的 SFTP 客户端。
如果传输中断,我如何恢复传输,例如如果连接失败?有没有办法重新开始传输,发现文件已经存在,然后从中断点开始传输更多数据?
我在这两个模块的文档中都找不到任何明确的信息。有没有类似于 OpenSSH 中的reget 命令的东西?
【问题讨论】:
标签: python sftp paramiko pysftp
我正在尝试使用 pysftp / paramiko 构建一个简单的 SFTP 客户端。
如果传输中断,我如何恢复传输,例如如果连接失败?有没有办法重新开始传输,发现文件已经存在,然后从中断点开始传输更多数据?
我在这两个模块的文档中都找不到任何明确的信息。有没有类似于 OpenSSH 中的reget 命令的东西?
【问题讨论】:
标签: python sftp paramiko pysftp
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)
【讨论】: