Мне было интересно, знает ли кто, как установить цвет текста, который появляется в оболочке. Я заметил, что "ls" использует несколько разных цветов при печати информации на экране (на моем Linux-боксе), задавался вопросом, могу ли я использовать это в Python.
Python | изменить цвет текста в оболочке
Ответ 1
Используйте escape-последовательности Curses или ANSI. Прежде чем вы начнете извергать escape-последовательности, вы должны проверить, что stdout - это tty. Вы можете сделать это с помощью sys.stdout.isatty()
. Здесь функция, выведенная из моего проекта, который выводит результат красным или зеленым цветом в зависимости от состояния, используя escape-последовательности ANSI:
def hilite(string, status, bold):
attr = []
if status:
# green
attr.append('32')
else:
# red
attr.append('31')
if bold:
attr.append('1')
return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), string)
Ответ 2
Я только что описал очень популярную библиотеку clint. Который имеет больше особенностей, кроме окрашивания вывода на терминале.
Кстати, он поддерживает терминалы MAC, Linux и Windows.
Вот пример его использования:
Установка (в Ubuntu)
pip install clint
Чтобы добавить цвет к некоторой строке
colored.red('red string')
Пример: использование для вывода цвета (стиль команды django)
from django.core.management.base import BaseCommand
from clint.textui import colored
class Command(BaseCommand):
args = ''
help = 'Starting my own django long process. Use ' + colored.red('<Ctrl>+c') + ' to break.'
def handle(self, *args, **options):
self.stdout.write('Starting the process (Use ' + colored.red('<Ctrl>+c') + ' to break)..')
# ... Rest of my command code ...
Ответ 3
Все основные цветовые коды приведены в https://www.siafoo.net/snippet/88
Ответ 4
curses
позволит вам правильно использовать цвета для используемого типа терминала.
Ответ 5
посмотрите http://www.pixelbeat.org/talks/python/ls.py
Ответ 6
Это так просто сделать на ПК: ОС Windows: Отправьте команду os для изменения текста: import os
os.system('color a') #green text
print 'I like green'
raw_input('do you?')