2010-02-24 2 views
28

Мне было интересно, знает ли кто, как установить цвет текста, который появляется в оболочке. Я заметил, что «ls» использует несколько разных цветов при печати информации на экране (в моем ящике Linux), было интересно, могу ли я воспользоваться преимуществами этого в Python.Python | изменить цвет текста в оболочке

ответ

52

Использовать пропуски или escape-последовательности ANSI. Прежде чем вы начнете извергать escape-последовательности, вы должны проверить, что stdout - это tty. Вы можете сделать это с помощью sys.stdout.isatty(). Вот функция вытащил из проекта шахты, который печатает вывод в красный или зеленый, в зависимости от состояния, используя 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) 
+13

+1 специально для 'sys.stdout.isatty()' – Nifle

+0

Также приятно иметь переопределение для случая, когда вывод не является tty, но вы все еще хотите цвет - скажите, что вы просто фильтруете линии с помощью sed или grep. –

+0

'unbuffer' может это сделать, поэтому вы не застреваете, если нет переопределения. –

5

Все основные цветовые коды приведены в https://www.siafoo.net/snippet/88

+2

Идентификатор безопасности этого веб-сайта истек. Может ли кто-нибудь проверить, что это безопасный веб-сайт? – BlackVegetable

+1

@BlackVegetable, да, он выглядит так же, как и раньше. Кроме того, вы можете просмотреть его [HTTP] (http://www.siafoo.net/snippet/88), если хотите. Я свяжусь с ними, чтобы сообщить им о сертификате. –

+0

, даже если вы доверяете ему, @BlackVegetable, вы получаете прокси-ошибку –

4

curses позволит использовать цвета правильно для типа терминала, который используется.

-3

Это так просто сделать на ПК: ОС Windows: Отправить ОС команду, чтобы изменить текст: импорт ОС

os.system('color a') #green text 
print 'I like green' 
raw_input('do you?') 
+5

Это устанавливает цвет глобально для всего терминала, а не для некоторых символов на нем. – Helgi

+0

Не работает вообще в консоли spyder или консоли IPython spyder. – Joooeey

8

я только что описал очень популярной библиотеки 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 ... 
Смежные вопросы