Вывод текста [31m вместо цвета

Я пытаюсь напечатать цветной текст с colorama, но когда я скомпилирую exe и запускаю следующий...

from colorama import Fore, Back, Style
print(Fore.RED + 'text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')
I get output of::

Вывод:

[31mtext
[0m
back to normal now

Можно ли печатать цвета при компиляции в pyinstaller exe или это просто невозможно?

Ответ 1

В Windows вы должны инициализировать Colorama с помощью colorama.init() (см. вторую строку):

from colorama import Fore, Back, Style
colorama.init()
print(Fore.RED + 'text')
print(Back.GREEN + 'and with a green background')
print(Style.DIM + 'and in dim text')
print(Style.RESET_ALL)
print('back to normal now')

Я тестировал этот код в cmd и PowerShell, и он выдает ожидаемый цветной вывод.

Из Документы Colorama:

В Windows вызов init() будет фильтровать escape-последовательности ANSI из любого текста, отправленного на stdout или stderr, и заменить их эквивалентными вызовами Win32.

На других платформах вызов init() не имеет эффекта (если вы не запрашиваете другие дополнительные функции, см. "Инициирование ключевых слов" ниже). По дизайну это позволяет приложениям безоговорочно вызывать init() на всех платформах, после чего должен работать только ANSI.

Ответ 2

cmd.exe Windows не поддерживает escape-последовательности ANSI.

Этот раздел о суперпользователе может помочь, если вы хотите, чтобы они были проинформированы cmd.exe изначально http://superuser.com/info/413073/windows-console-with-ansi-colors-handling/

Таким образом, чистые карандаши могут не работать под cmd.exe из Windows.

Однако согласно документации colorama

Это позволяет получить простой кросс-платформенный API для печати цветного текстового текста на Python и имеет счастливый побочный эффект, что существующие приложения или библиотеки, которые используют последовательности ANSI для получения цветного вывода на Linux или Mac теперь можно также работать с Windows, просто вызывая colorama.init().

Попробуйте использовать ConEmu. Вы могли бы это сделать