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
您好,我正在尝试使用 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