El SFTPClient de Paramiko aparentemente no tiene un método de exists
. Esta es mi implementación actual:
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
¿Hay una mejor manera de hacer esto? La comprobación de la subcadena en los mensajes de excepción es bastante fea y puede ser poco confiable.
Vea el módulo errno
para constantes que definen todos esos códigos de error. Además, es un poco más claro usar el atributo errno
de la excepción que la expansión de __init__
args, así que haría esto:
except IOError, e: # or "as" if you're using Python 3.0 if e.errno == errno.ENOENT: ...
No hay un método “existente” definido para SFTP (no solo paramiko), por lo que su método está bien.
Creo que revisar el errno es un poco más limpio:
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
Paramiko, literalmente, plantea FileNotFound
def sftp_exists(sftp, path): try: sftp.stat(path) return True except FileNotFound: return False