Paramiko调用SFTPClient.get报错FileNotFoundError找不到远程文件如何解决
问题根因
你使用的paramiko.SFTPClient.get()方法的参数顺序完全颠倒,且远程路径配置错误,是触发报错的核心原因:
sftp.get(remotepath, localpath)的入参规则是:第一个参数为树莓派(远程设备)上的目标文件路径,第二个参数为运行当前代码的本地设备要保存文件的路径- 你代码中将远程路径设为了根目录
/,又把树莓派上的文件路径填到了本地路径的位置:如果你是在其他设备(非树莓派)运行代码,本地设备不存在/home/pi/Code这个路径,自然会抛出文件不存在错误。
修正后的代码
import paramiko paramiko.util.log_to_file("paramiko.log") # 替换为你实际的树莓派IP地址 RECV_IP_ADDRESS = "192.168.x.x" host, port = RECV_IP_ADDRESS, 22 transport = paramiko.Transport((host, port)) # 认证信息 username, password = "pi", "raspberry" transport.connect(None, username, password) sftp = paramiko.SFTPClient.from_transport(transport) # 路径配置:注意参数顺序 remote_filepath = "/home/pi/Code/log.txt" # 树莓派上的文件路径 local_savepath = "./log.txt" # 本地保存路径,可根据自己的设备修改 sftp.get(remote_filepath, local_savepath) # 关闭连接 if sftp: sftp.close() if transport: transport.close()
疑问解答
- 无需在树莓派上额外运行其他程序,只要确保树莓派开启了SSH服务即可。如果未开启,可在树莓派终端执行
sudo raspi-config,在「Interface Options」中开启SSH功能。 - Paramiko确实是SSH/SFTP协议的封装工具,服务端只要支持标准SSH协议即可正常使用,不需要额外部署组件。
内容的提问来源于stack exchange,提问作者Lyra Orwell
相关产品推荐
相关产品推荐

