Панель загрузки Python FTP

#python #file-upload #ftp

#python #загрузка файла #ftp

Вопрос:

Я загружаю файл с помощью FTPLib на python, и у меня есть панель загрузки cli с progressbar 2.2. Мне нужно создать панель загрузки, чтобы сообщать о ходе загрузки.

У кого-нибудь есть какая-либо информация по теме?

Спасибо, Джодамелио


Как указал Сентхил Кумаран, в функции ftplib.storbinary есть параметр обратного вызова, но я не знаю, как его использовать.

Я пробовал это. Я ожидал, что он будет печатать сообщение каждый раз, когда был загружен байт.

 import ftplib

def callback():
    print("This is the callback function")

s = ftplib.FTP('myserver.com','login','password') # Connect

f = open('test.txt','rb')                # file to send
s.storbinary('STOR test.txt', f, 1024, callback())         # Send the file

f.close()                                # Close file and FTP
s.quit()
  

Комментарии:

1. Не вызывайте свой обратный вызов — на самом деле вы не передаете None в качестве обратного вызова здесь.

2. Я никогда раньше не использовал функцию обратного вызова, поэтому я немного сбит с толку. Какую часть я должен изменить?

Ответ №1:

Небольшое изменение в вашем коде:

 import ftplib

def callback(p):
    print("This is the callback function")

s = ftplib.FTP('myserver.com','login','password') # Connect

f = open('test.txt','rb')                # file to send
s.storbinary('STOR test.txt', f, 1024, callback)         # Send the file

f.close()                                # Close file and FTP
s.quit()
  

Обратный вызов необходимо вызвать позже. Если вы вызываете его при передаче в качестве параметра, вместо него передается возвращаемое значение. Поскольку ваша callback функция не имеет возврата, она будет передана None .

Комментарии:

1. Кстати, ftplib.storbinary функция передает каждый блок данных обратно функции обратного вызова, так что это должно было быть def callback(param1):

Ответ №2:

Было бы полезно ответить на конкретный вопрос, например, показать пример кода того, что вы пробовали. Отображение прогресса с помощью индикатора возможно, когда библиотека FTP предоставляет определенные возможности callback функций, и вы используете свою функцию индикатора прогресса (которая в данном случае является progressbar) и подключаете ее к этому обратному вызову. Просматривая документацию по ftplib, можно найти положения о присоединении обратных вызовов к определенным методам, возможно, это должно быть полезно для вас.

Комментарии:

1. черт возьми… должно быть, устал. Я искал там функцию обратного вызова и почему-то пропустил ее. Утром будет предоставлен обновленный код.