Подтвердить что ты не робот

Проверьте, существует ли путь на удаленном хосте, используя paramiko

Paramiko SFTPClient, по-видимому, не имеет метода exists. Это моя текущая реализация:

def rexists(sftp, path):
    """os.path.exists for paramiko SCP object
    """
    try:
        sftp.stat(path)
    except IOError, e:
        if 'No such file' in str(e):
            return False
        raise
    else:
        return True

Есть ли лучший способ сделать это? Проверка подстроки в сообщениях "Исключения" довольно уродлива и может быть ненадежной.

4b9b3361

Ответ 1

Смотрите errno module для констант, определяющих все эти коды ошибок. Кроме того, немного яснее использовать атрибут errno исключения, чем расширение аргументов __init__, поэтому я бы сделал следующее:

except IOError, e: # or "as" if you're using Python 3.0
  if e.errno == errno.ENOENT:
    ...

Ответ 2

Не существует метода "существует" для SFTP (а не только paramiko), поэтому ваш метод в порядке.

Я думаю, что проверка errno немного чище:

def rexists(sftp, path):
    """os.path.exists for paramiko SCP object
    """
    try:
        sftp.stat(path)
    except IOError, e:
        if e[0] == 2:
            return False
        raise
    else:
        return True

Ответ 3

Парамико буквально поднимает FileNotFoundError

def sftp_exists(sftp, path):
    try:
        sftp.stat(path)
        return True
    except FileNotFoundError:
        return False