OSError:put中的大小不匹配!4628344!=330596



我试图使用SFTP python库pysftp将文件发送到远程邮箱服务器。但是当我尝试放文件时,我得到了这个错误:

我使用的是python 3.7.4

Traceback (most recent call last):
File "SFTP.py", line 54, in <module>
srv.put('file.zip','file.zip')
File "C:UsersHPAnaconda3libsite-packagespysftp__init__.py", line 364, in put
confirm=confirm)
File "C:UsersHPAnaconda3libsite-packagesparamikosftp_client.py", line 759, in put
return self.putfo(fl, remotepath, file_size, callback, confirm)
File "C:UsersHPAnaconda3libsite-packagesparamikosftp_client.py", line 723, in putfo
"size mismatch in put!  {} != {}".format(s.st_size, size)
OSError: size mismatch in put!  4628344 != 330596

附言:我试过用另一台远程服务器,它运行得很好。这是我的代码

import pysftp
import os
cnopts = pysftp.CnOpts()
hostkeys = None
host="host.com"
username=username
password=password
if cnopts.hostkeys.lookup(host) == None:
print("New host - will accept any host key")
# Backup loaded .ssh/known_hosts file
hostkeys = cnopts.hostkeys
# And do not verify host key of the new host
cnopts.hostkeys = None
with pysftp.Connection(host=host, username=username, password=password, cnopts=cnopts) as sftp:        
if hostkeys != None:
print("Connected to new host, caching its hostkey")
hostkeys.add(host, sftp.remote_server_key.get_name(), sftp.remote_server_key)
hostkeys.save(pysftp.helpers.known_hosts())

srv = pysftp.Connection(host=host, username=username,password=password)
srv.put('file.zip','file.zip')

我找到了一个变通解决方案,但不推荐使用,我只需对引发异常的代码块进行注释即可解决问题:

with self.file(remotepath, "wb") as fr:
fr.set_pipelined(True)
size = self._transfer_with_callback(
reader=fl, writer=fr, file_size=file_size, callback=callback
)
if confirm:
s = self.stat(remotepath)
if s.st_size != size:
s = SFTPAttributes()
pass
# raise IOError(
#     "size mismatch in put!  {} != {}".format(s.st_size, size)
# )
else:
s = SFTPAttributes()
return s

文件是CCD_ 2。但是该解决方案会导致文件大小方面的其他问题。每当我运行put((方法时,服务器中传输的文件都会累积起来,因此需要小心处理。

编辑:

在将后检查参数设置为符合False后工作。因此无需修改paramiko代码。

srv.put('file.zip','file.zip',confirm=False)

最新更新