抛出IOError后,Paramiko SFTP Client会创建零大小的文件

时间:2016-03-09 09:43:48

标签: python ssh sftp paramiko

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我会用: 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

答案 1 :(得分:1)

预计。

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

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