Compruebe si existe un camino en un host remoto usando paramiko
Pregunta
SftpClient al parecer no tiene un exists
método. Este 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? Comprobación de la subcadena en mensajes de excepción es bastante feo y puede no ser fiable.
Solución
Vea la errno
módulo para las constantes que definen todos los errores códigos. Además, es un poco más claro a utilizar el atributo de __init__
la excepción que la expansión de los argumentos <=>, así que me gustaría hacer esto:
except IOError, e: # or "as" if you're using Python 3.0
if e.errno == errno.ENOENT:
...
Otros consejos
No hay "existe" método definido para SFTP (no sólo paramiko), por lo que su método está muy bien.
Creo que el control de la 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 eleva literalmente FileNotFoundError
def sftp_exists(sftp, path):
try:
sftp.stat(path)
return True
except FileNotFoundError:
return False
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow