Python: Как я могу сделать escape-коды ANSI работать и в Windows?
Если я запустил это в python под linux, он работает:
start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end
Но если я запустил его в Windows, это не сработает, как я могу заставить escape-коды ANSI работать и в Windows?
Ответы
Ответ 1
Вы можете проверить модуль Python для включения цветов ANSI для stdout в Windows? чтобы узнать, полезно ли это.
Модуль colorama кажется кросс-платформенным.
Вы устанавливаете colorama:
pip install colorama
Затем:
import colorama
colorama.init()
start = "\033[1;31m"
end = "\033[0;0m"
print "File is: " + start + "<placeholder>" + end
Ответ 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.
Ответ 3
Если вы находитесь на Win 10 (с поддержкой ANSI в родной среде), похоже, есть ошибка, которая была отмечена как разрешенная в Python 3.7 (хотя она не выглядит, на самом деле она была исправлена).
Одним из способов является добавление subprocess.call('', shell=True)
перед печатью.
Ответ 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...