Как применить раскраску / форматирование к отображаемому тексту в функции input () (аналогично форматированию инструкции печати)?

у меня есть небольшое игровое приложение, которое запускается с консоли Windows (cmd.исполняемый.) Я могу форматировать текст любым желаемым способом, используя escape-последовательности ANSI.

Я также хотел бы применить форматирование к тексту из input()-способ, но я не нашел способа как это сделать. Вот тестовый код...

from colorama import init
init(autoreset=True)

RED = "x1b[1;31;40m"

print(f"{RED}This text is redn")

not_red = input(f"{RED}Insert some random stuff: ")

в моей консоли windows вы увидите, что последовательность ANSI отображается как простая строка во входных данных заявление:

enter image description here

тогда как в моей консоли Spyder IDE он имеет обратный эффект:

enter image description here

может ли кто-нибудь объяснить мне отображаемое поведение в разных консолях? И есть ли способ отформатировать input() - текст в консоли Windows cmd? Здесь моя программа работает нормально, и я хотел бы сделать ее еще красивее: -)

спасибо заранее!

1 ответов


colorama произведения замена sys.stdout и sys.stderr С версиями, интерпретирующими последовательности ISO 6429, выполните соответствующие вызовы Win32 для их реализации и отправьте остальные символы в базовый поток. Этим объясняются ваши наблюдения:--3--> не использует уровень Python sys.stdout.write, и Spyder интерпретирует сами последовательности, но не влияет на вызовы Win32.

единственным разумным решением, по-видимому, является использование input без подсказки; вы не нужно делать больше, чем print ваше приглашение без новой строки (трейлинг , в Python 2 или end="" в Python 3).