我正在尝试使用Paramiko从我的树莓派获取日志文件:
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()
没有产生错误。
我是新来的帕拉米科。我需要在Pi上运行一些东西才能使其工作吗?它不只是SFTP/SSH的包装器吗?
-
你的直接问题是你有
SFTPClient.get
的参数反过来(你甚至有变量命名错误,localpath
显然应该是remotepath
)。所以Paramiko尝试用远程文件的路径创建一个本地文件。由于/home/pi/Code
不存在于您的本地(目标)机器上,您得到本地FileNotFoundError
错误。 -
一旦你纠正了这个,你将有另一个问题。
SFTPClient.get
的localpath
path参数需要是文件的路径,而不仅仅是目标目录的路径。参见Python Paramiko, PermissionError: [Errno 13] Permission denied when get file from remote server.
像这样:
localpath = "/log.txt"
remotepath = "/home/pi/Code/log.txt"
sftp.get(remotepath, localpath)
你把参数的顺序弄乱了。或者使用'//'作为文件路径