Изменение каталога на SFTP-сервере с помощью Paramiko

#python #sftp #paramiko

#python #sftp #paramiko

Вопрос:

Я успешно запустил этот скрипт при разработке, но при производстве структура файла немного отличается, и я получаю код ошибки ‘FileNotFoundError: ошибка Errno 2, такого файла нет’.

Когда я использую корневой логин, я полагаю, что попадаю в этот каталог:

 /root
  

Каталог, из которого мне нужно работать, это:

 /BackupStorage/Test/Here
  

Я полагаю, что получаю ошибку, потому что мой сеанс пытается запуститься из /root каталога. Как мне изменить каталог на /BackupStorage/Test/Here ? Или я совершенно не прав?

 local_path = r'C:DataScriptsTrialTestHere'
remote_path = f'/BackupStorage/Test/Here'

hostname = 'hostname1'
password = 'password123'
username = 'root'
port = 22

print(f'Connecting to {hostname} ...')
session = paramiko.Transport((hostname, 22))
session.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(session)
print(f'Connected to {hostname} - Remote Session Opened')

latest_time = -1
latest = None

# Below for loop finds latest sub-directory

for file_attr in sftp.listdir_attr(path=remote_path):
    if stat.S_ISDIR(file_attr.st_mode) and file_attr.st_mtime > latest_time:
        latest_time = file_attr.st_mtime
        latest = file_attr.filename

# Below for loop finds the .zip file within latest sub-directory
for file_attr in sftp.listdir_attr(path=f'{remote_path}/{latest}'):
    if file_attr.filename.endswith('.zip'):
        sftp.get(
            f'{remote_path}/{latest}/{file_attr.filename}',
            f'{local_path}{file_attr.filename}'
        )
        print(f'Most recent {branch_name} file successfully retrieved.')

session.close
print('Remote Session Closed.')
  

Ответ №1:

Использовать SFTPClient.chdir :

 sftp.chdir(path)
  

Или просто используйте абсолютные пути или исправьте относительные пути к дому другими методами.