Paramiko SFTPClient.get 失败,并出现“FileNotFoundError: [Errno 2] No such file or directory”(引用远程文件路径)

问题描述 投票:0回答:2

我正在尝试使用 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 $ _

(terminal screenshot)

但是程序好像找不到它。

我原以为连接可能已经断了。我尝试了这里找到的建议:
检查 paramiko ssh 连接是否仍然存在

transport.send_ignore()

没有产生错误。

我是 Paramiko 的新手。我需要在 Pi 上运行一些东西才能使其工作吗?它不就是SFTP/SSH的简单封装吗?

python linux networking ssh sftp
2个回答
1
投票
  1. 您面临的直接问题是,您拥有

    SFTPClient.get
    的参数(甚至您的变量命名错误,
    localpath
    显然应该是
    remotepath
    )。因此,Paramiko 尝试使用远程文件的路径创建本地文件。由于
    /home/pi/Code
    在您的 local(目标)计算机上不存在,因此您会收到 local
    FileNotFoundError
    错误。

  2. 一旦你纠正了这个问题,你就会遇到另一个问题。

    localpath
    SFTPClient.get
    路径参数需要是文件的路径,而不仅仅是目标目录的路径。请参阅 Python Paramiko,PermissionError:[Errno 13] 从远程服务器获取文件时权限被拒绝

所以像这样:

localpath = "/log.txt"
remotepath = "/home/pi/Code/log.txt"
sftp.get(remotepath, localpath)

0
投票

您搞乱了参数的顺序。或者使用“//”作为文件路径

© www.soinside.com 2019 - 2024. All rights reserved.