Python: Как я могу сделать escape-коды ANSI работать и в Windows?

Если я запустил это в python под linux, он работает:

start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end

Но если я запустил его в Windows, это не сработает, как я могу заставить escape-коды ANSI работать и в Windows?

Ответ 2

Вы можете взглянуть на https://github.com/kennethreitz/clint

Из файла readme:

>>> from clint.textui import colored, puts

>>> puts(colored.red('red text'))
red text

# It red in Windows, OSX, and Linux alike.

Ответ 4

Я написал простой модуль, доступный по адресу: http://pypi.python.org/pypi/colorconsole

Он работает с Windows, Mac OS X и Linux. Он использует ANSI для Linux и Mac, но имеет собственные вызовы функций консоли в Windows. У вас есть цвета, позиционирование курсора и ввод с клавиатуры. Это не замена проклятий, но может быть очень полезна, если вам нужно использовать в простых скриптах или играх ASCII.

Документы можно найти здесь: http://code.google.com/p/colorconsole/wiki/PageName

PS: Это тот же ответ для Печать в терминале с цветами с использованием Python?, но я не знал, как ссылаться на ответ.

Ответ 5

Попробуйте добавить точку с запятой здесь \033[; Я получаю нежелательные эффекты без этой точки с запятой.

start = "\033[;1;31m"
end = "\033[;0;0m"

Ответ 6

Отправка escape-последовательностей ANSI должна сработать, согласно тысячам прекрасных ответов в Интернете, но одна неясная деталь заняла у меня два полдня, чтобы наткнуться. Хитрость заключается в том, что должен быть установлен определенный раздел реестра. Я использую (только на сегодня) Windows 10 Enterprise, версия 1709, сборка 16299.

В HKEY_CURRENT_USER, под Консолью, прямо между TrimLeadingZeros и WindowAlpha должен быть VirtualTerminalLevel. Если его не существует, создайте его. Это REG_DWORD. Установите его значение равным 1. Откройте новый терминал, запустите Python и немного повеселитесь.

print("\033[48;2;255;140;60m ORANGE BACKGROUND \033[48;2;0;0;0m")

Смотрите https://github.com/ytdl-org/youtube-dl/issues/15758, чтобы читать материалы людей, которые знают об этом больше, чем я.

Теперь, если бы я мог вспомнить, почему я хотел раскрасить вывод своей программы на Python...