python - 连接失败后恢复 SFTP 下载(pysftp / paramiko)
问题描述
我正在尝试使用 pysftp / paramiko 构建一个简单的 SFTP 客户端。
如果传输中断(例如连接失败),我如何恢复传输?有没有办法重新开始传输,发现文件已经存在,然后从中断点开始传输更多数据?
我在这两个模块的文档中都找不到任何明确的信息。有没有类似于reget
OpenSSH 中的命令的东西?
解决方案
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)
推荐阅读
- json - 将复杂的嵌套 JSON 反序列化为 Scala 对象
- javascript - 当我从另一个页面加载时,JavaScript 无法正常工作
- ios - 为什么iphone和ipad上不显示背景图片?
- r - 2 个因素的初学者 R 预测模型
- php - 使用 UMI CMS 在 php 模板中输出自定义函数结果
- docker - Docker 部署选项,但保持相同的容器
- jquery - 通过单击外部关闭移动菜单 - 正文
- python - 我如何将所有偶数加在一起?
- actions-on-google - 如何从我的 webhook 触发 `action.intent.INTENT_NAME` 意图?
- bootstrap-4 - 无法在引导程序 4 中居中列