Я использую pysftp с Python 3.7 для настройки клиентского скрипта SFTP.
Мой код (упрощенный и минимальный):
import pysftp
import sys
# Variables
destination_dir = 'BOGUS_DIR'
server = 'myserver.mydomain.com'
user = 'my_user'
key = 'my_key'
port = 22
# cnopts
mycnopts = pysftp.CnOpts()
mycnopts.log = True
mycnopts.compression = True
mycnopts.ciphers = None
mycnopts.hostkeys = None
try:
with pysftp.Connection(server, username=user, private_key=key, port=port, cnopts=mycnopts) as sftp:
try:
with sftp.cd(destination_dir):
print("OK cd worked")
except:
print("NOT OK cd failed")
e = sys.exc_info()
print("Exception: {0}".format(e))
if sftp.isdir(destination_dir):
print("OK isdir")
else:
print("NOT OK isdir")
except:
print("Connection failure.")
e = sys.exc_info()
print("Exception: {0}".format(e))
Вывод: OK CD работал
Но я точно знаю, что BOGUS_DIR
не существует. Это похоже на то, что pysftp не вызывает исключение на cd()
, или я его улавливаю неправильно (следовательно, мой код python выполнен неправильно).
То же самое для isdir()
, что бы я ни указывал в качестве параметра , он всегда возвращает True
, даже если каталог не существует.
Если я изменяю параметры моего соединения для чего-то неправильного, я ловлю исключение сбоя соединения.
Неправильно ли обрабатывать исключения Pyftp , или мой код здесь виноват? Разве я не должен доверять pysftp и использовать Paramiko напрямую?