Проверьте, существует ли путь на удаленном хосте, используя 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
Есть ли лучший способ сделать это? Проверка подстроки в сообщениях "Исключения" довольно уродлива и может быть ненадежной.
Ответы
Ответ 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