вывод текста [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 или это просто невозможно?

2 ответов


в 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 docs:

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

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


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

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

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

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

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

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