Paramiko SFTP 客户端在抛出 IOError 后创建零大小的文件

Paramiko SFTP Client creates zero sized file after throwing IOError

您好,我正在尝试使用 Paramiko 的 SFTP 客户端将服务器中的远程文件复制到本地位置。下面是代码。

    try:
        self.SFTP.get(remotepath, localpath, callback=None)
    except IOError as e:
        print "File Not Found  "+self.location

远程位置并不总是包含请求的文件,因此我想打印错误消息并结束进程。

不幸的是,它打印了消息(IOError 消息),但它也创建了零大小的本地文件。

这是一个错误还是有其他方法可以避免这种情况?

这是意料之中的。

与其尝试获取一个您不知道它是否存在的文件,我建议您:

  • 首先尝试使用 Paramiko SFTP listdir 命令找到它,或者
  • 尝试使用 Paramiko SFTP file 命令从中获取 SFTPFile 对象。
    • 如果失败,则文件不存在。
    • 如果成功,只需 close SFTPFile 对象,然后使用 get 命令下载文件。

我会使用: sftp.stat(remotepath)

因此,在您的示例代码中:

try:
    if self.SFTP.stat(remotepath):
        self.SFTP.get(remotepath, localpath, callback=None)
except IOError as e:
    print "File Not Found  "+self.location

SFTP - Paramiko documentation