Paramiko库put方法confirm参数的工作原理与测试方法问询
Paramiko put方法中confirm参数的原理、功能与测试方法
一、工作原理与核心功能
confirm是Paramiko的SFTP客户端put方法的可选参数,默认值为True,作用是控制上传完成后是否校验文件的完整性:
- 当
confirm=True时:文件上传结束后,客户端会向SFTP服务器发送STAT请求,获取远程文件的大小等元数据,随后与本地文件的大小做对比。如果两者一致,说明上传完整;如果不一致,则抛出SFTPException类的异常,提示上传失败。 - 当
confirm=False时:上传完文件数据后直接结束流程,跳过远程文件的校验步骤。这样能减少一次网络请求,提升上传速度,但无法保证文件是否完整上传——比如网络中断导致仅上传了部分数据,客户端不会收到任何异常提示。
简单来说,这个参数就是在「上传速度」和「上传可靠性」之间做权衡:对完整性要求高的场景用默认的True;对速度要求更高、能接受后续手动校验的场景用False。
二、测试方法
1. 测试confirm=True的正常与异常场景
正常校验场景
- 准备一个本地测试文件(比如
test_upload.txt),写入固定内容并记录其大小; - 用Paramiko建立SFTP连接,调用
put方法并设置confirm=True; - 上传完成后,通过SFTP的
stat方法获取远程文件的大小,与本地文件大小对比,验证两者是否一致。
代码示例:
import paramiko import os # 初始化SFTP连接 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect("your_remote_host", username="your_user", password="your_pass") sftp = ssh_client.open_sftp() local_path = "./test_upload.txt" remote_path = "/tmp/test_upload.txt" # 执行上传(开启校验) sftp.put(local_path, remote_path, confirm=True) # 手动验证完整性 remote_file_size = sftp.stat(remote_path).st_size local_file_size = os.path.getsize(local_path) assert remote_file_size == local_file_size, "上传文件不完整" # 关闭连接 sftp.close() ssh_client.close()
异常场景测试
- 模拟上传过程中的网络中断(比如在上传时手动断开网络,或用
tc命令在Linux环境下设置高丢包率); - 调用
put方法并设置confirm=True,此时方法会抛出异常,说明校验机制生效。
2. 测试confirm=False的场景
- 同样准备本地测试文件,调用
put方法时设置confirm=False; - 正常上传完成后,远程文件应与本地一致;
- 模拟网络中断的情况,上传结束后客户端不会抛出异常,但远程文件的大小会小于本地文件,以此验证
confirm=False确实跳过了完整性校验。
内容的提问来源于stack exchange,提问作者user571102
相关产品推荐
相关产品推荐

