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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top