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

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

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

from colorama import init
init(autoreset=True)

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

print(f"{RED}This text is red\n")

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 Ответ

0 голосов
/ 02 сентября 2018

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

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

...