Python paramiko.sftp.SFTPError:预期属性

Python paramiko.sftp.SFTPError:预期属性,python,sftp,paramiko,Python,Sftp,Paramiko,运行Python代码时出现以下错误: sftp.put(本地路径、远程路径、回调=跟踪进度、确认=真) 但是如果我设置confirm=False,那么这个错误就不会出现。 跟踪进度的定义如下所示: def track_progress(bytes_transferred, bytes_total): total_percent = 100 transferred_percent = (bytes_transferred * total_percent) / bytes_tota

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

sftp.put(本地路径、远程路径、回调=跟踪进度、确认=真)
但是如果我设置
confirm=False
,那么这个错误就不会出现。 跟踪进度的定义如下所示:

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)
有人能帮我理解这里的问题吗

回溯(最近一次呼叫最后一次):
文件“D:/Users/prpandey/PycharmProjects/pmppracise/Transport.py”,第59行,在
sftp.put(本地路径、远程路径、回调=跟踪进度、确认=真)
文件“D:\Users\prpandey\PycharmProjects\pmppracise\venv\lib\site packages\paramiko\sftp\u client.py”,第759行,输入
返回self.putfo(fl、远程路径、文件大小、回调、确认)
文件“D:\Users\prpandey\PycharmProjects\pmppracise\venv\lib\site packages\paramiko\sftp\u client.py”,第720行,在putfo中
s=self.stat(远程路径)
文件“D:\Users\prpandey\PycharmProjects\pmppracise\venv\lib\site packages\paramiko\sftp\u client.py”,第495行,在stat中
提出建议或(“预期属性”)
paramiko.sftp.SFTPError:预期属性
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”消息,服务器应向其返回“ATTRS”消息(文件属性)或带有错误的“STATUS”消息(101)。您的服务器似乎返回带有“OK”状态的“STATUS”消息(我根据您和Paramiko源代码提供的数据进行猜测)。“OK”是对“STAT”请求的无效响应。帕拉米科并不期待这种毫无意义的反应,所以它报告了一个不太清楚的错误。但最终这是服务器的一个缺陷。您所能做的就是通过设置
confirm=False

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

大小请求使用SFTP“STAT”消息,服务器应向其返回“ATTRS”消息(文件属性)或带有错误的“STATUS”消息(101)。您的服务器似乎返回带有“OK”状态的“STATUS”消息(我根据您和Paramiko源代码提供的数据进行猜测)。“OK”是对“STAT”请求的无效响应。帕拉米科并不期待这种毫无意义的反应,所以它报告了一个不太清楚的错误。但最终这是服务器的一个缺陷。您所能做的就是通过设置
confirm=False
来禁用验证