paramiko.sftp.SFTPError: Expected attributes

paramiko.sftp.SFTPError: Expected attributes

当 运行 Python 代码时出现以下错误:

sftp.put(local_path, remote_path, callback=track_progress, confirm=True)

但是如果我做 confirm=False 那么这个错误就不会出现。 track_progress的定义如下:

def track_progress(bytes_transferred, bytes_total):
    total_percent = 100
    transferred_percent = (bytes_transferred * total_percent) / bytes_total
    result_str = f"Filename: {file}, File Size={str(bytes_total)}b |-->
                 " f" Transfer Details ={str(transferred_percent)}% " \ f"({str(bytes_transferred)}b)Transferred"
    #self.logger.info(result_str)
    print(result_str)

任何人都可以帮助我理解这里的问题。

Traceback (most recent call last):
  File "D:/Users/prpandey/PycharmProjects/PMPPractise/Transport.py", line 59, in <module>
    sftp.put(local_path, remote_path, callback=track_progress, confirm=True)
  File "D:\Users\prpandey\PycharmProjects\PMPPractise\venv\lib\site-packages\paramiko\sftp_client.py", line 759, in put
    return self.putfo(fl, remotepath, file_size, callback, confirm)
  File "D:\Users\prpandey\PycharmProjects\PMPPractise\venv\lib\site-packages\paramiko\sftp_client.py", line 720, in putfo
    s = self.stat(remotepath)
  File "D:\Users\prpandey\PycharmProjects\PMPPractise\venv\lib\site-packages\paramiko\sftp_client.py", line 495, in stat
    raise SFTPError("Expected attributes")
paramiko.sftp.SFTPError: Expected attributes

Paramiko 日志文件:


按照提示,我试过了:

sftp.put(local_path, remote_path, callback=track_progress, confirm=False)
t, msg = sftp._request(CMD_STAT, remote_path)

t是101。

当您设置 confirm=True 时,SFTPClient.put 向服务器询问刚刚上传的文件的大小。它这样做是为了验证文件大小是否与源本地文件的大小相匹配。另见

大小请求使用 SFTP“STAT”消息,服务器应向其发送 return“ATTRS”消息(文件 属性)或“STATUS”错误消息 (101)。您的服务器似乎 return 状态为“OK”的“STATUS”消息(我的猜测基于您的数据和 Paramiko 源代码)。 “OK”是对“STAT”请求的无效响应。 Paramiko 没想到会出现这种乱七八糟的响应,所以报了一个有点不清楚的错误。但最终它是服务器的错误。您所能做的就是通过设置 confirm=False.

来禁用验证