Уведомления

Группа в Telegram: @pythonsu

#1 Май 2, 2019 07:23:59

VIRTOK
Зарегистрирован: 2017-10-23
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Создать полосу загрузки файла с SFTP

Реализовал на данный момент только процесс загрузки с SFTP.
Как создать полосу загрузки файла ?

 # SFTP тестовый  и доступен всем пользователям интернет
#Host SFTP сервера
host = "test.rebex.net"
#Port SFTP сервера
port = 22
#Имя пользователя для подключения к SFTP серверу
username = "demo"
#Пароль для подключения к SFTP серверу
password = "password"
#######################################################################################################################
import paramiko
def sftp_connect(host,username,password,chdir_sftp,sftp_get_file,put_file_from_sftp_to_folder):
    #Включаем логи
    paramiko.util.log_to_file('D:\\Lessons_Python\\Рaramiko\\paramiko.log')
    #Используем функцию для соединения по SSH
    ssh = paramiko.SSHClient()
    #Получаем ключ для подключения по SSH
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #Устанавливаем соединение с sftp
    #Используя host ,username, password
    sftp_connect = ssh.connect(host, username=username,password=password)
    #Открываем соединение с SFTP
    sftp=ssh.open_sftp()
    #Переходим в каталог на SFTP
    #Пример  функции sftp.chdir('/pub/example')
    sftp.chdir(chdir_sftp)
    #Выгружаем файлы
    sftp.get(sftp_get_file,put_file_from_sftp_to_folder+sftp_get_file)
    #Закрыть соединение
    ssh.close()
put_the_file_in_a_folder="D:\\Lessons_Python\\Рaramiko"
chdir_sftp='/pub/example'
sftp_get_file= "ConsoleClientSmall.png"
sftp_connect(host,username,password,chdir_sftp,sftp_get_file,put_the_file_in_a_folder)

Офлайн

#2 Май 2, 2019 09:32:57

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Создать полосу загрузки файла с SFTP

посмотрите тут https://stackoverflow.com/questions/24278146/how-do-i-monitor-the-progress-of-a-file-transfer-through-pysftp
вроде как ваш случай.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Май 2, 2019 23:03:23

VIRTOK
Зарегистрирован: 2017-10-23
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Создать полосу загрузки файла с SFTP

Решил частично , хотелось бы иметь полосу загрузки типа
( filename: 3.4MiB/s | 40%<#########=============> | 0:03:54 remaining )

 #Host SFTP сервера
host = "test.rebex.net"
#Port SFTP сервера
port = 22
#Имя пользователя для подключения к SFTP серверу
username = "demo"
#Пароль для подключения к SFTP серверу
password = "password"
#############################################################################################################################################################################
import paramiko
#Рализуем полосу загрузки
progressDict={}
progressEveryPercent=10
for i in range(0,101):
    if i%progressEveryPercent==0:
        progressDict[str(i)]=""
def printProgressDecimal(x,y):
    if int(100*(int(x)/int(y))) % progressEveryPercent ==0 and progressDict[str(int(100*(int(x)/int(y))))]=="":
        print("Файл загружен на {}% (Передано данных в байтах {} / {} общий размер файлав байтах)".format(str("%.2f" %(100*(int(x)/int(y)))),x,y))
        progressDict[str(int(100*(int(x)/int(y))))]="1"
#############################################################################################################################################################################
def sftp_connect(host,username,password,chdir_sftp,sftp_get_file,put_file_from_sftp_to_folder):
    #Включаем логи
    paramiko.util.log_to_file('D:\\Рaramiko\\paramiko.log')
    #Используем функцию для соединения по SSH
    ssh = paramiko.SSHClient()
    #Получаем ключ для подключения по SSH
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #Устанавливаем соединение с sftp
    #Используя host ,username, password
    sftp_connect = ssh.connect(host, username=username,password=password)
    #Открываем соединение с SFTP
    sftp=ssh.open_sftp()
    #Переходим в каталог на SFTP
    #Пример  функции sftp.chdir('/pub/example')
    sftp.chdir(chdir_sftp)
    #Выгружаем файлы
    #Пример функции
    #sftp.get("ConsoleClient.png","D:\\Рaramiko\\ConsoleClient.png")
    #sftp.get(sftp_get_file,put_file_from_sftp_to_folder+sftp_get_file)
    sftp.get(sftp_get_file,localpath=put_file_from_sftp_to_folder+sftp_get_file, callback=lambda x,y: printProgressDecimal(x,y))
    #Закрыть соединение
    ssh.close()
put_the_file_in_a_folder="D:\\Рaramiko"
chdir_sftp='/pub/example'
sftp_get_file= "ConsoleClientSmall.png"
sftp_connect(host,username,password,chdir_sftp,sftp_get_file,put_the_file_in_a_folder)

Офлайн

#4 Май 3, 2019 10:07:05

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Создать полосу загрузки файла с SFTP

VIRTOK
Решил частично , хотелось бы иметь полосу загрузки типа( filename: 3.4MiB/s | 40%<#########=============> | 0:03:54 remaining )
вам нужно всего лишь написать нормальную калбэк функцию вместо “lambda x,y: printProgressDecimal(x,y)” которая будет отрисовывать вам то что вы хотите и как вы хотите .

Есть уже готовые прогрессбары
https://gist.github.com/vladignatyev/06860ec2040cb497f0f3
https://pypi.org/project/console-progressbar/
https://github.com/tqdm/tqdm

Последний, по моему, как раз делает то что вам нужно(или очень близко к тому).
Или можете чуть чуть допилить напильником под ваши нужды первые две и золотой ключик у вас в кармане.
Скорость закачки и оставшееся время вы можете высчитать сами имея общий размер закачиваемых данных данных и текущее + предыдущее показания сколько скопировано.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Май 3, 2019 10:08:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version