Я использую, tqdm
чтобы напечатать прогресс в сценарии, который я запускаю в блокноте Jupyter. Я печатаю все сообщения на консоль через tqdm.write()
. Однако это все еще дает мне искаженный вывод, например:
То есть каждый раз, когда должна быть напечатана новая строка, новая строка прогресса печатается на следующей строке. Этого не происходит, когда я запускаю скрипт через терминал. Как я могу решить это?
python
jupyter-notebook
tqdm
Рохан Саксена
источник
источник
tqdm_notebook
, я могу даже делать обычныеprint
с, и это не влияет на индикатор выполнения.progressbar
stackoverflow.com/questions/3160699/python-progress-bar/…Ответы:
Попробуйте использовать
tqdm.notebook.tqdm
вместоtqdm
, как описано здесь .Это может быть так же просто, как изменить ваш импорт на:
from tqdm.notebook import tqdm
Удачи!
РЕДАКТИРОВАТЬ: после тестирования кажется, что на
tqdm
самом деле он отлично работает в «текстовом режиме» в записной книжке Jupyter. Трудно сказать, потому что вы не предоставили минимальный пример , но похоже, что ваша проблема вызвана оператором print в каждой итерации. Оператор печати выдает число (~ 0,89) между каждым обновлением строки состояния, что портит вывод. Попробуйте удалить оператор печати.источник
print()
заявление, я использовалtqdm.write()
. Однакоtqdm_notebook
дает хорошие результаты. Спасибоtqdm
, а неtqdm_notebook
? Это хорошо работает с Python 3.6 и Jupyter 1.0.0.Это альтернативный ответ на случай, когда tqdm_notebook у вас не работает.
Учитывая следующий пример:
Вывод будет выглядеть примерно так (прогресс будет отображаться красным):
Проблема в том, что вывод на stdout и stderr обрабатывается асинхронно и отдельно с точки зрения новых строк.
Если, скажем, Jupyter получает на stderr первую строку, а затем «обработанный» вывод на stdout. Затем, как только он получит вывод на stderr для обновления хода выполнения, он не вернется назад и не обновит первую строку, поскольку обновит только последнюю строку. Вместо этого ему придется написать новую строку.
Обходной путь 1, запись в стандартный вывод
Одним из способов решения этой проблемы будет вывод обоих на стандартный вывод:
Выход изменится на (не более красный):
Здесь мы видим, что Jupyter, кажется, не очищается до конца строки. Мы могли бы добавить другой обходной путь для этого, добавив пробелы. Такие как:
Что дает нам:
Обходной путь 2, установите описание вместо
В целом, может быть более простым не иметь два выхода, а вместо этого обновить описание, например:
На выходе (описание обновляется в процессе обработки):
Вывод
В основном вы можете заставить его нормально работать с простым tqdm. Но если tqdm_notebook работает для вас, просто используйте его (но тогда вы, вероятно, не прочитали бы это далеко).
источник
progressbar
stackoverflow.com/a/34482761/1207193Большинство ответов уже устарели. Лучше, если вы правильно импортируете tqdm .
источник
TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0 Please use tqdm.notebook.tqdm instead of tqdm.tqdm_notebook
Если другие советы здесь не работают и - как и я - вы используете
pandas
интеграцию черезprogress_apply
, вы можете разрешитьtqdm
это:Главное здесь - в
tqdm.autonotebook
модуле. Как указано в их инструкциях по использованию в ноутбуках IPython , это позволяетtqdm
выбирать между форматами индикатора выполнения, используемыми в ноутбуках Jupyter и консолях Jupyter - по причине, до сих пор не проводящей дополнительных исследований с моей стороны, конкретный формат, выбранный пользователем,tqdm.autonotebook
работает плавно, вpandas
то время как все остальные - нет. Т,progress_apply
специально.источник
Чтобы завершить ответ Оскарбрэнсона: можно автоматически выбирать версии индикатора выполнения для консоли или ноутбука в зависимости от того, откуда он запускается:
Более подробную информацию можно найти здесь
источник
Ничто из вышеперечисленного не работает для меня. Я обнаружил, что выполнение следующих проблем решает эту проблему после ошибки (он просто очищает все экземпляры индикаторов выполнения в фоновом режиме):
источник
try: # Avoids problem on notebooks / Hydrogen IDE tqdm.tqdm._instances.clear() except Exception: pass
Для всех, кто работает в Windows и не может решить проблему дублирования полос с помощью любого из решений, упомянутых здесь. Мне пришлось установить
colorama
пакет, как указано в известных проблемах tqdm, которые его исправили.Попробуйте это на следующем примере:
Что даст что-то вроде:
источник
Используйте tqdm_notebook
источник