C'è un modo per stampare una stringa in modo colorato con python?stampa corde colorate per console con python
Ad esempio, posso stampare parte della stringa rossa o qualcosa in una console? Uso Mac OS X.
C'è un modo per stampare una stringa in modo colorato con python?stampa corde colorate per console con python
Ad esempio, posso stampare parte della stringa rossa o qualcosa in una console? Uso Mac OS X.
Questo funziona per le console Linux che supportano il colore:
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'))
Ecco un esempio di utilizzo colorstr
per fare un logger colorato:
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!!!')
Questo esempio i log sia per la console (stderr
) e un file (/tmp/test.log
). Il messaggio alla console è colorato, ma l'output del file è chiaro.
Eccellente: avrei scelto la soluzione. Grazie. – Benjamin
PS: I entrambi stampa su console e accedere al file. Su file, vengono visualizzati i tag dei colori, esiste un modo per rimuoverli quando si scrive su un file convertendo la stringa in un altro formato? – Benjamin
@Benjamin: stai usando il modulo 'logging', o emetti istruzioni' print' separate (una per la console, una per il file)? – unutbu
È possibile utilizzare colorama, ma usarlo con parsimonia.
+1. La prima volta che ne ho sentito parlare, e funziona su Windows! Mi aspettavo che funzionasse su Linux e OS X, ma è stata una piacevole sorpresa. –
Altre alternative sono:
Ho giocato con loro in Windows. Non so come si comportano in OSX.
Se si desidera eseguire questa operazione con il minimo sforzo, è possibile utilizzare la libreria tendo.colorer.
Basta importarlo per colorare l'accesso su tutte le piattaforme, senza interrompere il registro reindirizzato.
Inoltre, è possibile utilizzarlo per visualizzare messaggi colorati personalizzati se lo si desidera, poiché contiene una libreria ANSI multipiattaforma e un helper per esso.
stampa? Intendi dire stampare su una console Linux? O stampare su una console Windows? O visualizzare in una pagina HTML? Cosa intendi? –