Форум сайта python.su
0
Добрый день, написал скрипт загрузки данных с sftp, выдается ошибка IsADirectoryError: Is a directory:
import paramiko host = "HOST" port = 22 username = "user" password = "pqssword" transport = paramiko.Transport((host, port)) transport.connect(username = username, password = password) sftp = paramiko.SFTPClient.from_transport(transport) remotepath = '/home/exchange/reports' localpath = '/home/exchange/reports' sftp.get(remotepath, localpath) sftp.close() transport.close()
Отредактировано letema88 (Сен. 2, 2019 17:08:36)
Офлайн
221
get - это метод получения конкретного файла.
Что бы решить вашу задачу нужно рекурсивно проходить удаленную директорию и копировать каждый файл
Офлайн
0
Я исправил, но почему то не работает
import paramiko host = "HOST" port = 22 username = "user" password = "pqssword" transport = paramiko.Transport((host, port)) transport.connect(username = username, password = password) sftp = paramiko.SFTPClient.from_transport(transport) remotepath = '/home/exchange/reports' localpath = '/home/exchange/reports' data = sftp.listdir(remotepath) for i in data: print (i) sftp.get(data(i), localpath) sftp.close() transport.close()
Офлайн
221
ну потому что вы не понимает что делаете. Во первых sftp.get должен быть внутри цикла. Во вторых в data у вас лежит список, а цикл for i in data вытаскивает значения из списка и присваивает х переменной i. Поэтому в вашем случае должно быть как то так sftp.get(i, localpath)
P.S. поздравляю вас, вы стали последней каплей, которая еще держала меня на форуме в качестве участника и админа. Я больше не в моральных силах помогать этому поколению “новичков”, поколению лайков и видеоуроков от подобных же неучей. Я устал, я ухожу.
Офлайн
0
Помогло вот это (может кому то пригодится)
import paramiko host = "HOST" port = 22 username = "user" password = "pqssword" transport = paramiko.Transport((host, port)) transport.connect(username = username, password = password) sftp = paramiko.SFTPClient.from_transport(transport) remotepath = '/home/exchange/reports' localpath = '/home/exchange/reports' data = sftp.listdir(remotepath) print(data) for i in data: print(i) sftp.get(remotepath+i, localpath+i) sftp.close() transport.close() transport.close()
Офлайн