Paramiko SFTPClient.get 失败,"FileNotFoundError: [Errno 2] No such file or directory"引用远程文件路径



我正在尝试使用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的包装器吗?

  1. 你的直接问题是你有SFTPClient.get的参数反过来(你甚至有变量命名错误,localpath显然应该是remotepath)。所以Paramiko尝试用远程文件的路径创建一个本地文件。由于/home/pi/Code不存在于您的本地(目标)机器上,您得到本地FileNotFoundError错误。

  2. 一旦你纠正了这个,你将有另一个问题。SFTPClient.getlocalpathpath参数需要是文件的路径,而不仅仅是目标目录的路径。参见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)

你把参数的顺序弄乱了。或者使用'//'作为文件路径

相关内容

  • 没有找到相关文章

最新更新