Compruebe si existe una ruta en un host remoto utilizando paramiko

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