Überprüfen Sie, ob ein Pfad auf einem entfernten Host existiert paramiko mit
Frage
SftpClient hat anscheinend keine exists
Methode. Dies ist meine aktuelle Implementierung:
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
Gibt es einen besseren Weg, dies zu tun? Überprüfen auf Teilzeichenfolge in Ausnahmemeldungen ist ziemlich hässlich und kann unzuverlässig sein.
Lösung
Siehe errno
Modul für Konstanten definieren, all diese Fehlercodes. Außerdem ist es ein bisschen klarer das errno
Attribut der Ausnahme als die Ausdehnung des __init__
args zu verwenden, so würde ich dies tun:
except IOError, e: # or "as" if you're using Python 3.0
if e.errno == errno.ENOENT:
...
Andere Tipps
Es gibt kein "existiert" Methode definiert für SFTP (nicht nur paramiko), so dass Ihre Methode ist in Ordnung.
Ich denke, die errno Überprüfung ist ein wenig sauberer:
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 buchstäblich hebt FileNotFoundError
def sftp_exists(sftp, path):
try:
sftp.stat(path)
return True
except FileNotFoundError:
return False
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow