2010-09-12 31 views
7

Có cách nào để in chuỗi theo cách đầy màu sắc với python không?in chuỗi đầy màu sắc ra bàn điều khiển với python

Ví dụ: tôi có thể in một phần của chuỗi màu đỏ hoặc thứ gì đó vào bảng điều khiển không? Tôi sử dụng Mac OS X.

+0

in? Bạn có nghĩa là in đến một giao diện điều khiển Linux? Hoặc in ra bảng điều khiển Windows? Hoặc hiển thị trong một trang HTML? Ý anh là gì? –

Trả lời

7

này làm việc cho linux console có hỗ trợ màu:

CODE={ 
    'ENDC':0, # RESET COLOR 
    'BOLD':1, 
    'UNDERLINE':4, 
    'BLINK':5, 
    'INVERT':7, 
    'CONCEALD':8, 
    'STRIKE':9, 
    'GREY30':90, 
    'GREY40':2, 
    'GREY65':37, 
    'GREY70':97, 
    'GREY20_BG':40, 
    'GREY33_BG':100, 
    'GREY80_BG':47, 
    'GREY93_BG':107, 
    'DARK_RED':31, 
    'RED':91, 
    'RED_BG':41, 
    'LIGHT_RED_BG':101, 
    'DARK_YELLOW':33, 
    'YELLOW':93, 
    'YELLOW_BG':43, 
    'LIGHT_YELLOW_BG':103, 
    'DARK_BLUE':34, 
    'BLUE':94, 
    'BLUE_BG':44, 
    'LIGHT_BLUE_BG':104, 
    'DARK_MAGENTA':35, 
    'PURPLE':95, 
    'MAGENTA_BG':45, 
    'LIGHT_PURPLE_BG':105, 
    'DARK_CYAN':36, 
    'AUQA':96, 
    'CYAN_BG':46, 
    'LIGHT_AUQA_BG':106, 
    'DARK_GREEN':32, 
    'GREEN':92, 
    'GREEN_BG':42, 
    'LIGHT_GREEN_BG':102, 
    'BLACK':30, 
} 

def termcode(num): 
    return '\033[%sm'%num 

def colorstr(astr,color): 
    return termcode(CODE[color])+astr+termcode(CODE['ENDC']) 

if __name__=='__main__': 
    astr='yippy skippy' 
    # for num in range(300): 
    #  color=termcode(num) 
    #  print('%s: %s'%(num,color+astr+termcode(CODE['ENDC']))) 
    for key in sorted(CODE.keys()): 
     print('%s: %s'%(key,colorstr(astr,key))) 

    print(colorstr('Red','RED')) 

Dưới đây là một ví dụ của việc sử dụng colorstr để thực hiện một logger colorized:

import logging 
import copy 

logger=logging.getLogger(__name__) 

class ColoredFormatter(logging.Formatter): 
    # A variant of code found at http://stackoverflow.com/questions/384076/how-can-i-make-the-python-logging-output-to-be-colored 
    LEVELCOLOR = { 
     'DEBUG': 'BLUE', 
     'INFO': 'BLACK', 
     'WARNING': 'PURPLE', 
     'ERROR': 'RED', 
     'CRITICAL': 'RED_BG', 
     } 

    def __init__(self, msg): 
     logging.Formatter.__init__(self, msg) 

    def format(self, record): 
     record = copy.copy(record) 
     levelname = record.levelname 
     if levelname in self.LEVELCOLOR: 
      record.levelname = colorstr(levelname,self.LEVELCOLOR[levelname]) 
      record.name = colorstr(record.name,'BOLD') 
      record.msg = colorstr(record.msg,self.LEVELCOLOR[levelname]) 
     return logging.Formatter.format(self, record) 

if __name__=='__main__': 
    logger.setLevel(logging.DEBUG) 
    console = logging.StreamHandler() 
    console.setFormatter(
     ColoredFormatter('%(name)s: %(message)s (%(filename)s:%(lineno)d)')) 
    logger.addHandler(console) 
    fh = logging.FileHandler('/tmp/test.log','w') 
    fh.setFormatter(logging.Formatter('%(name)s: %(message)s')) 
    logger.addHandler(fh) 

    logger.debug('debug') 
    logger.info('info') 
    logger.warning('Warning') 
    logger.error('ERROR') 
    logger.critical('CRITICAL!!!') 

Ví dụ này các bản ghi cho cả hai giao diện điều khiển Hoặc (/tmp/test.log) Thông điệp tới bàn điều khiển được tô màu, nhưng đầu ra cho tệp này được để nguyên.

+1

Tuyệt vời: Tôi đã chọn giải pháp của bạn. Cảm ơn. – Benjamin

+0

PS: Tôi vừa in ra bàn điều khiển vừa đăng nhập vào tập tin. Trên tệp, các thẻ màu xuất hiện, có cách nào để xóa chúng khi ghi vào tệp bằng cách chuyển đổi chuỗi sang một số định dạng khác không? – Benjamin

+0

@Benjamin: Bạn có đang sử dụng mô-đun 'đăng nhập' hay phát hành các câu lệnh' print' riêng biệt (một cho bảng điều khiển, một cho tệp) không? – unutbu

8

Bạn có thể sử dụng colorama nhưng hãy sử dụng ít.

+2

+1. Lần đầu tiên tôi nghe nói về nó, và nó hoạt động trên Windows! Tôi hy vọng nó hoạt động trên Linux và OS X, nhưng đó là một bất ngờ thú vị. –

2

lựa chọn thay thế khác là:

  • colorconsole đó là tuyên bố để làm việc trên OSX
  • urwid cũng hoạt động trên OSX
  • curses trên thư viện nhưng chỉ cho linux afaik
  • win curses này hoạt động trên chiến thắng
  • console

Tôi đã chơi với chúng trong cửa sổ. Không biết làm thế nào họ cư xử trong OSX.

1

Nếu bạn muốn thực hiện điều này với nỗ lực tối thiểu, bạn có thể sử dụng thư viện tendo.colorer.

Chỉ bằng cách nhập, nó sẽ tô màu cho bạn đăng nhập trên tất cả các nền tảng mà không phá vỡ nhật ký được chuyển hướng.

Ngoài ra, bạn có thể sử dụng nó để hiển thị các thư màu tùy chỉnh nếu bạn muốn, vì nó chứa một thư viện ANSI nền tảng chéo và trình trợ giúp cho nó.

Các vấn đề liên quan