Я создал программу, которая загружает видео в формате mp4 по ссылке. Я добавил код ниже
chunk_size = 256
URL = 'https://gogodownload.net/download.php?url=aHR0cHM6LyAdrefsdsdfwerFrefdsfrersfdsrfer363435349URASDGHUSRFSJGYfdsffsderFStewthsfSFtrftesdfseWVpYnU0bmM3LmdvY2RuYW5pLmNvbS91c2VyMTM0Mi9lYzBiNzk3NmM1M2Q4YmY5MDU2YTYwNjdmMGY3ZTA3Ny9FUC4xLnYwLjM2MHAubXA0P3Rva2VuPW8wVnNiR3J6ZXNWaVA0UkljRXBvc2cmZXhwaXJlcz0xNjcxOTkzNzg4JmlkPTE5MzU1Nw=='
x = requests.head(URL)
y = requests.head(x.headers['Location'])
file_size = int(y.headers['content-length'])
response = requests.get(URL, stream=True)
with open('video.mp4', 'wb') as f:
for chunk in response.iter_content(chunk_size=chunk_size):
f.write(chunk)
Этот код работает правильно и загружает видео, но я хочу добавить индикатор выполнения в реальном времени. Я пытался использовать alive-progress (код добавлен ниже), но это не сработало должным образом.
def compute():
response = requests.get(URL, stream=True)
with open('video.mp4', 'wb') as f:
for chunk in response.iter_content(chunk_size=chunk_size):
f.write(chunk)
yield 256
with alive_bar(file_size) as bar:
for i in compute():
bar()
Это ответ, который я получил, однако файл загружен правильно
Любая помощь?
это библиотека, которая создает причудливый индикатор выполнения, я видел это в другом ответе на стеке
@MythicalPhantom Вы обновляете панель с помощью bar(), когда вы написали фрагмент (я полагаю, это 256 байт). Таким образом, общее количество вызовов bar() в 256 раз меньше общего размера файла. Попробуйте инициализировать панель с помощью with alive_bar(file_size // 256) as bar: или вызвать панель с помощью bar(256)






Скорее всего, это происходит из-за того, что ваш терминал не поддерживает кодировку, которая печатается. Отредактируйте настройки вашего терминального приложения для поддержки кодировки UTF-8 или выше (предпочтительно UTF-16 или UTF-32).
Также попробуйте tqdm. Это более известная библиотека, поэтому вы знаете, что она была опробована и протестирована.
Это код, который вы должны попробовать. Я обновил ваше свойство chunk_size, чтобы оно соответствовало размеру файла, который я также преобразовал в КБ (килобайты). Он также правильно показывает значения вместе с процентами.
Что касается странных полей, появляющихся на вашем терминале, это потому, что ваш терминал не поддерживает кодировку, используемую библиотекой. Возможно, попробуйте отредактировать настройки терминала для поддержки «UTF-8» или выше.
file_size = int(int(y.headers['content-length']) / 1024)
chunk_size = 1024
def compute():
response = requests.get(URL, stream=True)
with open('video.mp4', 'wb') as f:
for chunk in response.iter_content(chunk_size=chunk_size):
f.write(chunk)
yield 1024
with alive_bar(file_size) as bar:
for i in compute():
bar()
Что такое
alive_bar()?