Проблема с цветом фона при печати ошибки Python 3

Стандартная команда для окрашивания вывода print в Python 3 с использованием escape-кодов ANSI, похоже, не работает.

Думаю, это связано с изменениями, которые сопровождают новейшие версии Python 3.

Моя система: Python 3.7.3, Windows 10, IDLE.

Хотя на Python 2.7 работает нормально, на Python 3.7 просто не работает.

  • print("\033[1;32;40m Bright Green \n") в IDLE, как показано на этом статья выводит [1;32;40m Bright Green. Наоборот, это прекрасно работает на онлайн-анализаторе Python 2, дающем цветной фон.

  • Было обнаружено исправление, что на Python 3 escape-символом является \x1b вместо \033. Модифицированное выражение внутри оператора print, такое как print("\x1b[1;32;40m Bright Green \n") в IDLE, выводит [1;32;40m Bright Green без цветного фона.

  • Выполнение print("\033[1;32;40m Bright Green \n") для файла py по-прежнему выводит [31;1;4mHello[0m
  • Поскольку между моей локальной системой есть различия, я попытался запустить онлайн-парсер Python 3 print("\033[1;32;40m Bright Green \n"), и он дал мне [1;32;40m Bright Green.

Такое использование управляющих кодов ANSI чаще всего предлагается в качестве решения в ссылках.

Что я делаю неправильно?


person ExoticBirdsMerchant    schedule 05.06.2020    source источник
comment
имеет отношение к изменениям, которые сопровождают новейшие версии Python 3 — какая у вас версия и в каких версиях она работала? Какая платформа?   -  person jonrsharpe    schedule 05.06.2020
comment
Моя версия — Python 3.7.3, а платформа — Windows 10.   -  person ExoticBirdsMerchant    schedule 05.06.2020
comment
И работало ли это в более ранних версиях? Вы читали напр. stackoverflow.com/q/12492810/3001761?   -  person jonrsharpe    schedule 05.06.2020
comment
Нет, я сейчас прочитаю это   -  person ExoticBirdsMerchant    schedule 05.06.2020
comment
Уважаемый @jonrsharpe все еще не работает, я импортировал colorama и напечатал код в принятом решении File is: [1;31m<placeholder>[0;0m. Фон не был цветным. Я думаю, что это но в Python 3.7   -  person ExoticBirdsMerchant    schedule 05.06.2020
comment
@jonrsharpe Он отлично работает на Python 2.7, я пробовал онлайн-парсер   -  person ExoticBirdsMerchant    schedule 05.06.2020
comment
Вероятно, существуют другие различия между вашей локальной средой и синтаксическим анализатором в сети. Отображает ли синтаксический анализатор в сети цвета в Python 3? Показывает ли Python 2 IDLE их локально? А как насчет вне IDLE?   -  person jonrsharpe    schedule 05.06.2020
comment
@jonrsharpe я пытаюсь делать то, что вы говорите, и я объединяю ваши комментарии по вопросу. Одно дополнение, что на py файле не работает - в вопросе   -  person ExoticBirdsMerchant    schedule 05.06.2020
comment
Что на самом деле означает в py файле? он отлично работает на Python 2.7 — это все еще из онлайн-парсера или локально? Непонятно, честно ли вы сравниваете.   -  person jonrsharpe    schedule 05.06.2020
comment
@jonrsharpe у меня есть файл в пакетах сайтов с именем test.py. Пустой модуль кода можно открыть с помощью параметра New File из файла IDLE GUI. Это File > New File   -  person ExoticBirdsMerchant    schedule 05.06.2020
comment
Я могу подтвердить в IDLE 2.7, что print("\033[1;32;40m Bright Green \n") выводится в консоль [1;32;40m Bright Green (виджет tkinter Text не может обрабатывать побег, и функциональность не была добавлена ​​​​в IDLE вручную).   -  person Minion Jim    schedule 11.06.2020
comment
Так где же виновата проблема? ПРОСТОЙ? Команда звучит, но IDE не работает? @МиньонДжим   -  person ExoticBirdsMerchant    schedule 11.06.2020
comment
Я не могу найти проблему, кроме самой Windows, но это не объясняет разницу между версиями. Я тестировал python -c "print('\033[1;32;40m Bright Green \n')" в Windows (cmd и powershell) и Linux, но только последний работает должным образом. Я бы рекомендовал использовать colorama.   -  person Minion Jim    schedule 11.06.2020
comment
Возможно, вы столкнулись с этой ошибкой? Кажется, больше людей жаловались на это на python 3.7. Также может быть, что терминал IDLE не поддерживает цветовые коды ANSI или прекратил их поддержку.   -  person Leonardo Dagnino    schedule 13.06.2020


Ответы (2)


Вам нужно использовать другой код в зависимости от того, используете ли вы терминал или IDLE. Есть много способов сделать это для терминала, но для IDLE ниже я нашел способ.

Используйте sys.stdout.shell.write(to_print, color) с переменными цветами, являющимися одной из строк ниже

Вы можете использовать следующие цвета:

  • ВСТРОЕННЫЙ
  • НИТЬ
  • консоль
  • КОММЕНТАРИЙ
  • стандартный вывод
  • стдерр
  • ударил
  • ОПРЕДЕЛЕНИЕ
  • КЛЮЧЕВОЕ СЛОВО
  • ОШИБКА
import sys

try:
    color = sys.stdout.shell
    color.write("Hi? \n","STRING")
except AttributeError:
    raise RuntimeError("Use IDLE")
person KetZoomer    schedule 09.06.2020

Цветная библиотека Python работает без проблем. Escape-коды ANSI не такие гладкие.

После pip install colored можно и после from colored import stylized

тогда попробуй- print(stylize("This is green.", colored.fg("green")))

person Community    schedule 14.06.2020