К сожалению, не похоже, что есть простой способ получить байтовые числа байтов.
Вы добавляете действительно большие файлы в этот tar-файл? Если нет, я бы обновлял прогресс по каждому файлу так, чтобы по мере добавления файлов в tar, прогресс обновлялся в зависимости от размера каждого файла.
Предположим, что все ваши имена файлов находятся в переменной toadd
, а tarfile
является TarFile
объектом. Как насчет
from itertools import imap
from operator import attrgetter
# you may want to change this depending on how you want to update the
# file info for your tarobjs
tarobjs = imap(tarfile.getattrinfo, toadd)
total = sum(imap(attrgetter('size'), tarobjs))
complete = 0.0
for tarobj in tarobjs:
sys.stdout.write("\rPercent Complete: {0:2.0d}%".format(complete))
tarfile.add(tarobj)
complete += tarobj.size / total * 100
sys.stdout.write("\rPercent Complete: {0:2.0d}%\n".format(complete))
sys.stdout.write("Job Done!")