Frage
Ich habe gerade den Quellcode Django und ich sah diese Funktion:
def colorize(text='', opts=(), **kwargs):
"""
Returns your text, enclosed in ANSI graphics codes.
Depends on the keyword arguments 'fg' and 'bg', and the contents of
the opts tuple/list.
Returns the RESET code if no parameters are given.
Valid colors:
'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'
Valid options:
'bold'
'underscore'
'blink'
'reverse'
'conceal'
'noreset' - string will not be auto-terminated with the RESET code
Examples:
colorize('hello', fg='red', bg='blue', opts=('blink',))
colorize()
colorize('goodbye', opts=('underscore',))
print colorize('first line', fg='red', opts=('noreset',))
print 'this should be red too'
print colorize('and so should this')
print 'this should not be red'
"""
code_list = []
if text == '' and len(opts) == 1 and opts[0] == 'reset':
return '\x1b[%sm' % RESET
for k, v in kwargs.iteritems():
if k == 'fg':
code_list.append(foreground[v])
elif k == 'bg':
code_list.append(background[v])
for o in opts:
if o in opt_dict:
code_list.append(opt_dict[o])
if 'noreset' not in opts:
text = text + '\x1b[%sm' % RESET
return ('\x1b[%sm' % ';'.join(code_list)) + text
Ich entfernte es aus dem Kontext heraus und in einer anderen Datei abgelegt nur, es zu versuchen, die Sache ist, dass es nicht den Text, den ich es passieren zu färben scheint. Es könnte sein, dass ich es richtig verstehe nicht, aber es ist eigentlich nicht nur den Text mit ANSI Grafikcodes umgab zurück, die als Terminal zur tatsächlichen Farbe konvertieren.
Ich habe versucht, alle gegebenen Beispiele zu nennen, aber es sind gerade das Argument ich als Text angegeben.
Ich bin mit Ubuntu so denke ich, das Terminal sollte Farben unterstützen.
Lösung
Es ist, dass Sie viele Begriffe nicht definiert haben, weil sie von mehreren Variablen beruht außerhalb der Funktion definiert.
Statt nur
import django.utils.termcolors as termcolors
red_hello = termcolors.colorize("Hello", fg='red') # '\x1b[31mHello\x1b[0m'
print red_hello
oder kopieren Sie einfach auch die ersten Zeilen von django / utils / termcolors.py speziell:
color_names = ('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white')
foreground = dict([(color_names[x], '3%s' % x) for x in range(8)])
background = dict([(color_names[x], '4%s' % x) for x in range(8)])
RESET = '0'
def colorize( ... ):
...
print colorize("Hello", fg='red') # '\x1b[31mHello\x1b[0m'
Auch Anmerkung:
>>> from django.utils.termcolors import colorize
>>> red_hello = colorize("Hello", fg="red")
>>> red_hello # by not printing; it will not appear red; special characters are escaped
'\x1b[31mHello\x1b[0m'
>>> print red_hello # by print it will appear red; special characters are not escaped
Hello