使用paramiko检查远程主机上是否存在路径
Paramiko的SFTPClient似乎没有一个叫exists
的方法。这是我现在的实现方式:
def rexists(sftp, path):
"""os.path.exists for paramiko's SCP object
"""
try:
sftp.stat(path)
except IOError, e:
if 'No such file' in str(e):
return False
raise
else:
return True
有没有更好的方法呢?在异常信息中查找子字符串看起来很糟糕,而且可能不太可靠。
3 个回答
6
对于SFTP(不仅仅是paramiko),并没有定义“exists”这个方法,所以你用的方法是可以的。
我觉得检查错误号(errno)会更简洁一些:
def rexists(sftp, path):
"""os.path.exists for paramiko's SCP object
"""
try:
sftp.stat(path)
except IOError, e:
if e[0] == 2:
return False
raise
else:
return True
10
Paramiko 这个库实际上会抛出一个叫做 FileNotFoundError
的错误。
def sftp_exists(sftp, path):
try:
sftp.stat(path)
return True
except FileNotFoundError:
return False
21
可以查看errno
模块,里面定义了所有这些错误代码的常量。而且,使用异常的errno
属性比展开__init__
参数要更清晰,所以我会这样做:
except IOError, e: # or "as" if you're using Python 3.0
if e.errno == errno.ENOENT:
...