I am downloading files over FTP using the following Python script. What I wanted is to see the details of the progress while downloading. For that I used ProgressBar
You never update the ProgressBar
. What you need to do is to:
Implement a function (or a class method) that you will pass to FTP.retrbinary as callback
instead of file.write
. The function should do file.write
and also update the progress bar.
You also need to know size of the file/transfer for maxval
argument of ProgressBar
. For that you can use FTP.size.
A trivial implementation is like:
local_path = "archive.zip"
remote_path = "/remote/path/archive.zip"
file = open(local_path, 'wb')
size = ftp.size(remote_path)
pbar = ProgressBar(widgets=widgets, maxval=size)
pbar.start()
def file_write(data):
file.write(data)
global pbar
pbar += len(data)
ftp.retrbinary("RETR " + remote_path, file_write)
And now you get the progress bar you want:
Downloading: 72% [############################### ] ETA: 0:00:00 242.1 MiB/s
Note for others: The OP code uses progressbar2 library.
PyQt implementation: Update PyQt progress from another thread running FTP download.