Python 验证SFTP Put操作

Python 验证SFTP Put操作,python,python-3.x,pysftp,Python,Python 3.x,Pysftp,我正在使用pysftp0.2.8将文件放在远程SFTP主机上。我想添加验证以确认文件已放置在远程SFTP主机上 pysftp.Connection对象上的put函数将引发以下错误 IOError–如果远程路径不存在 OSError–如果本地路径不存在 因此,这与我试图实现的目标不符 现在我通过比较本地文件的st_大小和远程文件的st_大小来进行验证,但这“感觉”不对 local\u file\u size=os.stat(已处理的文件).st\u size 远程文件大小=sftp.put(已处

我正在使用pysftp0.2.8将文件放在远程SFTP主机上。我想添加验证以确认文件已放置在远程SFTP主机上

pysftp.Connection对象上的put函数将引发以下错误

IOError–如果远程路径不存在
OSError–如果本地路径不存在

因此,这与我试图实现的目标不符

现在我通过比较本地文件的st_大小和远程文件的st_大小来进行验证,但这“感觉”不对

local\u file\u size=os.stat(已处理的文件).st\u size
远程文件大小=sftp.put(已处理文件,确认=True).st\u大小
如果远程文件\u attributes.st\u size!=本地\u文件\u attributes.st\u大小:
引发异常('本地文件和远程文件大小之间存在差异。文件可能未传输,或仅部分传输')

这是检查文件是否已传输的可靠方法吗?如果文件传输成功,是否有任何理由怀疑文件可能会关闭一个字节或更多?

取决于传输层上正在移动的调用
sftp
的表现力足够强,客户机可以使用
O_APPEND
打开并前后写(在这种情况下,一切都可以正常工作)。。。或者查找最后一个字节,先写入,然后跳回并从头开始写入。更现实的是,客户端完全能够打开N个不同的连接,并在每个连接中复制文件的不同子集,因此无法保证在写入最后一个字节后文件立即完成。另一方面,对于许多人来说,这是正确的。这取决于哪些呼叫正在传输层上移动
sftp
的表现力足够强,客户机可以使用
O_APPEND
打开并前后写(在这种情况下,一切都可以正常工作)。。。或者查找最后一个字节,先写入,然后跳回并从头开始写入。更现实的是,客户端完全能够打开N个不同的连接,并在每个连接中复制文件的不同子集,因此无法保证在写入最后一个字节后文件立即完成。另一方面,对很多人来说,这是真的。