2010-02-24 60 views
28

Tôi đã tự hỏi liệu có ai biết cách đặt màu của văn bản hiển thị trong trình bao hay không. Tôi nhận thấy 'ls' sử dụng một vài màu sắc khác nhau khi in ra thông tin cho màn hình (trên hộp Linux của tôi), đã tự hỏi nếu tôi có thể tận dụng lợi thế đó trong Python.Python | thay đổi màu văn bản trong shell

Trả lời

52

Sử dụng các trình tự Curses hoặc ANSI escape. Trước khi bạn bắt đầu spouting escape sequences, bạn nên kiểm tra stdout đó là một tty. Bạn có thể làm điều này với sys.stdout.isatty(). Dưới đây là một chức năng kéo từ một dự án của tôi mà in ra màu đỏ hoặc màu xanh lá cây, tùy thuộc vào tình trạng, sử dụng chuỗi ANSI thoát:

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 đặc biệt là cho 'sys.stdout.isatty()' – Nifle

+0

Nó cũng tốt đẹp để có một ghi đè cho trường hợp đầu ra không phải là một tty, nhưng bạn vẫn muốn màu sắc - nói rằng bạn chỉ lọc dòng với sed hoặc grep –

+0

'unbuffer' có thể làm điều đó, vì vậy bạn không bị mắc kẹt nếu không có ghi đè. –

5

Tất cả các mã màu chính được nêu tại https://www.siafoo.net/snippet/88

+2

Chứng chỉ bảo mật của trang web này đã hết hạn. Bất cứ ai có thể xác minh rằng đây là một trang web an toàn? – BlackVegetable

+1

@BlackVegetable, yeah, nó trông giống như trước đây. Ngoài ra, bạn có thể xem nó [HTTP] (http://www.siafoo.net/snippet/88) nếu bạn thích. Tôi sẽ liên lạc với họ để cho họ biết về chứng nhận. –

+0

ngay cả khi bạn tin tưởng nó, @BlackVegetable, bạn nhận được một lỗi proxy –

4

curses sẽ cho phép bạn sử dụng màu sắc phù hợp cho các loại thiết bị đầu cuối đang được sử dụng.

-3

Đây là đơn giản như vậy để làm trên PC: hệ điều hành Windows: Gửi os một lệnh để thay đổi văn bản: import os

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

Điều này đặt màu trên toàn cầu, cho toàn bộ thiết bị đầu cuối, không phải đối với một số ký tự trên nó – Helgi

+0

Không hoạt động ở tất cả trong bảng điều khiển của trình điều khiển spyder hoặc trình điều khiển IPython của trình điều khiển gián điệp. – Joooeey

8

tôi vừa mô tả rất phổ biến thư viện clint. Trong đó có nhiều tính năng ngoài việc tô màu đầu ra trên thiết bị đầu cuối.

Bằng cách hỗ trợ các thiết bị đầu cuối MAC, Linux và Windows.

Dưới đây là ví dụ của việc sử dụng nó:

Cài đặt (trong Ubuntu)

pip install clint 

Để thêm màu sắc cho một số chuỗi

colored.red('red string') 

Ví dụ: Sử dụng cho đầu ra màu (kiểu lệnh 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 ... 
Các vấn đề liên quan