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.

War es hilfreich?

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
scroll top