Странное поведение прогрессбара

Чтобы загрузить файл JSON с сайта NVD, я использую следующий код:

#!/usr/bin/env python
from tqdm import tqdm
import time
import requests
import re
chunk_size = 1024
# Download JSON
year = input("Enter year: ")
url = requests.get('https://nvd.nist.gov/vuln/data-feeds#JSON_FEED')
for filename in re.findall("nvdcve-1.1-" + year + "\.json\.zip", url.text):
    print("\r[!] Received file: " + filename)
    r = requests.get("https://nvd.nist.gov/feeds/json/cve/1.1/" + filename, stream=True)
    total_size = int(r.headers['content-length'])
    with open("/tmp/" + filename, 'wb') as f:
        for chunk in tqdm(iterable=r.iter_content(chunk_size=chunk_size), total=total_size / chunk_size, unit='KB'):
            f.write(chunk)
        time.sleep(1)
        print("\n[+] The download is complete")

При запуске этого приложения все работает хорошо и файл скачивается, но в Pycham и терминале появляется странная ошибка:

82%|████████▏ | 2726/3342.5546875 [00:00<00:00, 1478.94KB/s]/usr/lib/python3/dist-packages/tqdm/std.py:522: TqdmWarning: clamping frac to range [0, 1]
full_bar = Bar(
100%|██████████| 3343/3342.5546875 [00:00<00:00, 3577.67KB/s]
[+] The download is complete

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

Похоже, что библиотека не перенаправляет свой вывод в stderr github.com/tqdm/tqdm/issues/681

Alexander Jardim 14.12.2020 21:22

@AlexanderJardim, большое спасибо за ссылку, я нашел материал, который, похоже, мне помог. Добавил один параметр dynamic_ncols=True и вроде все работает как надо. Я все еще тестирую в разных ситуациях и операционных системах. Спасибо.

Alex Rebell 15.12.2020 11:28

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

Alexander Jardim 15.12.2020 12:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
566
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Благодаря наводке на ресурсе github.com/tqdm/tqdm/issues/681 далее github.com/tqdm/tqdm#redirecting-writing там я обнаружил, что можно задать параметр: dynamic_ncols=True в итоге получилось так:

for chunk in tqdm(iterable=r.iter_content(chunk_size=chunk_size), total=total_size / chunk_size, unit=' KB', dynamic_ncols=True):

теперь все работает и никаких ошибок\предупреждений не появляется. Проверено на нескольких операционных системах.

Другие вопросы по теме