我正在尝试使用 Paramiko 从我的 Raspberry Pi 获取日志文件:
import paramiko
paramiko.util.log_to_file("paramiko.log")
# Open a transport
host, port = RECV_IP_ADDRESS, 22
transport = paramiko.Transport((host, port))
# Auth
username, password = "pi", "raspberry"
transport.connect(None, username, password)
# Go!
sftp = paramiko.SFTPClient.from_transport(transport)
# Download
filepath = "/"
localpath = "/home/pi/Code/log.txt"
sftp.get(filepath, localpath)
# Close
if sftp: sftp.close()
if transport: transport.close()
但是,当我运行此程序时,我收到文件未找到错误:
FileNotFoundError:[Errno 2]没有这样的文件或目录:'/home/pi/Code/log.txt'
显然文件在这里
po@raspberrypi:~/Code $ pwd
/home/pi/Code
po@raspberrypi:~/Code $ ls
a.out log.txt test.c
po@raspberrypi:~/Code $ _
但是程序好像找不到它。
我原以为连接可能已经断了。我尝试了这里找到的建议:
检查 paramiko ssh 连接是否仍然存在
transport.send_ignore()
没有产生错误。
我是 Paramiko 的新手。我需要在 Pi 上运行一些东西才能使其工作吗?它不就是SFTP/SSH的简单封装吗?
SFTPClient.get
的参数(甚至您的变量命名错误,localpath
显然应该是 remotepath
)。因此,Paramiko 尝试使用远程文件的路径创建本地文件。由于 /home/pi/Code
在您的 local(目标)计算机上不存在,因此您会收到 local FileNotFoundError
错误。
一旦你纠正了这个问题,你就会遇到另一个问题。
localpath
的 SFTPClient.get
路径参数需要是文件的路径,而不仅仅是目标目录的路径。请参阅 Python Paramiko,PermissionError:[Errno 13] 从远程服务器获取文件时权限被拒绝。
所以像这样:
localpath = "/log.txt"
remotepath = "/home/pi/Code/log.txt"
sftp.get(remotepath, localpath)
您搞乱了参数的顺序。或者使用“//”作为文件路径