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
.
来禁用验证
当 运行 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
.