gpt4 book ai didi

python - paramiko 文件传输操作是原子的吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:55 25 4
gpt4 key购买 nike

我使用 paramiko.SFTP 对象的 getput 方法。我依稀记得我确实有时使用 get 方法获取不完整的文件内容,但从未注意到 put 有任何问题。这只是我的运气,还是我应该执行额外的检查以确保我在远程端获得正确的文件?如果是这样,我该怎么做,因为我只有对该远程服务器的 SFTP 访问权限?

通过仅 SFTP 访问,我的意思是我无法通过 SSH 进入:

$ ssh user@ipaddress
user@ipaddress's password:
PTY allocation request failed on channel 0
shell request failed on channel 0

最佳答案

如果 SFTP 传输没有错误或中断地完成,您可以相当确定文件已被完全复制,因为 SFTP 协议(protocol)要求发送的每个 block 都得到确认。因此,在 TCP、SSH channel 和来自每个 block 的 ACK 的可靠性之间,文件不太可能以任何方式被截断。

仅使用 SFTP 时还可以做一些其他事情:

  • 传输后,您可以对文件调用 stat() 以验证其实际大小。
  • 您可以回读文件的一个或多个 block 并在本地进行比较。
  • 一些 SFTP 服务器有一个检查文件扩展名(我不认为 openssh 支持这个)。 Paramiko sftp 文件有一个 check() 方法,可让您获取部分或全部文件的哈希值。

直接回答您的问题标题,传输不是原子的。该文件在写入时仍可能在系统上被更改。如果你想防止这种情况发生,你可以将文件远程写入一个临时位置,验证它,然后调用 sftp.rename 将它移动到它的最终目的地(这是 Linux 中的原子操作相同的文件系统)。这大致类似于 rsync 所做的,并且可能尽可能接近“原子”。

关于python - paramiko 文件传输操作是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com