2016-05-06 2 views
2

У меня есть некоторые команды управления Django, которые вызывают методы в других классах для выполнения различных задач, таких как выборка данных из внешних API.Отображение прогресса одной строки во время команды управления Django и ее отключение во время тестов

В этих методах я вывода одну строку, которая отображает прогресс, что-то вроде:

print('Fetched %d of %d' % (n, total) + ' '*30, end='\r') 

Это работает отлично, но когда я запускаю мои тесты это получает распечатаны и щурит на дисплее .....E....F.... Я мог бы заплатить print во всех моих тестах, но это кажется неуклюжим.

Итак (a) Должен ли я выводить эту линию прогресса другим способом и/или (b) есть лучший способ подавить этот вывод во время выполнения тестов?

+0

У вас может быть ваша собственная обертка вокруг печати, которая будет проверять, является ли sys.stdout терминалом или нет, и в зависимости от этого ведут себя по-другому, например. \ r для терминала \ n для файла или трубы – Jerzyk

ответ

1

Первый шаг - фактически избавиться от заявлений печати и заменить его на logging.

С регистрацией django вы получаете гораздо больше контроля, чем с печатью, и это не сложно настроить. Две из ключевых особенностей - это то, что вы можете управлять ли сообщениями журналов с файлом или консолью. Вы также можете дополнительно настроить его на основе флага DEBUG.

Возможно, вам нужны эти сообщения, чтобы отображаться только на вашем сервере-разработчике, а не на производстве. Таким образом, регистрация может помочь вам. И что еще более важно, когда тесты запускаются, он отключает флаг отладки, чтобы ваш ..... E .... F не был загроможден.

+0

Спасибо. Я не уверен в использовании журнала для этого, хотя и счастлив, что его исправили! Во-первых, эти операторы печати используются только для кода, который запускается из командной строки с командами управления, поэтому это нормально, если они происходят на реальном сервере. Во-вторых, они используются для печати одной строки, чьи цифры обновляются с успехом - может ли это сделать запись? –

+0

есть. Подумайте о регистрации в качестве более совершенной и расширенной версии печати. – e4c5

+0

У меня есть работа по протоколированию, но я не вижу, как перезаписать предыдущую строку в консоли, как я могу с помощью 'print ('hello', end = '\ r')'. –

Смежные вопросы