El registro de Python genera fuentes de diferentes colores e imprime en el archivo de registro

Ya sea el cliente o el servidor, siempre se imprimen muchos registros y no es fácil encontrar los clave. Investigué el método de impresión de registros con color en Python. Debería ser el más fácil. No requiere bibliotecas externas y es compatible con Windows y Linux.

Instrucciones

Ingrese la línea de comando de Python, ejecútela os.system('')en la entrada del programa y luego inserte algunos caracteres especiales en ambos lados del carácter que desea imprimir.

Aquí, \033es 27 en octal, que es Escape en ASCII. [31mSignifica que las cosas en la parte trasera se vuelven rojas, y [0msignifica que las cosas en la parte trasera se restauran a sus valores predeterminados. [32mSignifica que las cosas en la parte de atrás se vuelven verdes, y [0msignifica que las cosas en la parte de atrás se restauran a sus valores predeterminados.

Cabe señalar que cuando el programa comienza a ejecutarse, debe ejecutarse os.system(''), es decir, se ejecuta un comando cmd vacío. Si no se ejecuta, no se reconocerá la instrucción de color.

Color básico

Piense en ello \033[31m como \033[3xm, el rango de valores de x dentro es de 0 a 7, que corresponden a

La imagen de arriba está en Wikipedia, puede encontrarla buscando "código de escape ansi".

https://en.wikipedia.org/wiki/ANSI_escape_code en.wikipedia.org

 

Después de encapsularlo, ¡puede imprimir el registro con colores a voluntad!

principio

Estos son los códigos de escape ANSI, que se explican en detalle en la página de la enciclopedia anterior. ¿Por qué es "escapar"? Aquí es el octal \ 033, que es el decimal 27, que es hexadecimal 0x1B, que es Esc en ASCII. Otra palabra clave de búsqueda es Emulación VT100.

En otras palabras, Console no solo puede generar caracteres originales, sino también cambiar el formato de los caracteres e incluso manipular cursores.

Otros métodos de uso

¿Puedo hacer eco directamente de una cadena de color en cmd? Por supuesto que puede, pero debe aprender a ingresar caracteres de Escape. Mi prueba debe ser cmd, no Powershell.

¿Cómo entrar a escapar? Parece haber dos tipos. En el primer tipo, presione 27 mientras mantiene presionada la tecla Alt, y luego suelte Alt; en el segundo tipo, presione Ctrl + [.

Aunque se muestra un ^ [, no es posible ingresar directamente un ^ [.

¿Puede estar en un archivo de texto? Aunque no puede verlo directamente con un editor, también es posible si lo imprime en la línea de comandos.

Abra Notepad ++, ingrese

¿Cómo ingresar este ESC? Encuentre una copia lista para usar o presione y mantenga presionada la tecla Alt, presione 27, suelte la tecla Alt y aparecerá un ESC. También se pueden introducir otros caracteres de control en ASCII de esta forma.

Entonces puedes imprimir en la línea de comando

Si escribe directamente en un archivo por lotes, también puede hacer eco de caracteres de colores como este.

Otros formatos

Estudie cuidadosamente los artículos en la wiki. Hay muchos otros formatos. Acabo de mencionar el [3xmcolor de primer plano y [4xmel color de fondo, que [9xmes el color de primer plano brillante y [10xmel color de fondo brillante.

Aquí hay un guión que imprime las 32 combinaciones de estos 4 patrones * 8 colores.

class Color:
    Black = 0
    Red = 1
    Green = 2
    Yellow = 3
    Blue = 4
    Magenta = 5
    Cyan = 6
    White = 7

class Mode:
    Foreground = 30
    Background = 40
    ForegroundBright = 90
    BackgroundBright = 100

def tcolor(c, m=Mode.Foreground):
    return '\033[{}m'.format(m + c)

def treset():
    return '\033[0m'

if __name__ == '__main__':
    import os
    os.system('')

    # usage
    print(tcolor(Color.Red) + 'hello' + treset())
    print(tcolor(Color.Green, Mode.Background) + 'color' + treset())
    print()

    COLOR_NAMES = ['Black', 'Red', 'Green', 'Yellow', 'Blue', 'Magenta', 'Cyan', 'White']
    MODE_NAMES = ['Foreground', 'Background', 'ForegroundBright', 'BackgroundBright']

    fmt = '{:11}' * len(COLOR_NAMES)
    print(' ' * 20 + fmt.format(*COLOR_NAMES))

    for mode_name in MODE_NAMES:
        print('{:20}'.format(mode_name), end='')
        for color_name in COLOR_NAMES:
            mode = getattr(Mode, mode_name)
            color = getattr(Color, color_name)
            print(tcolor(color, mode) + 'HelloColor' + treset(), end=' ')
        print()
 

Salida en la consola VSCode

Salida en Powershell

Salida en cmd

Salida en raspbian

Como se dice en la wiki, el valor RGB real correspondiente a cada color puede ser diferente para diferentes consolas.

De hecho, existen varios formatos como resaltar, tachar, subrayar, etc. Puedes estudiar la wiki detenidamente o mirar un guión aquí.

win10colors.cmd

https://stackoverflow.com/questions/2048509/how-to-echo-with-different-colors-in-the-windows-command-line stackoverflow.com

 

A continuación se muestra el resultado de las primeras líneas de este win10colors.cmd, en negrita y subrayado.

Es posible que diferentes consolas no admitan completamente todas las funciones.

¿Por qué necesitamos os.system ('')

Si se omite esta oración, el comando de color en Windows no tendrá efecto. De hecho, se utiliza el efecto secundario de esta frase, el efecto secundario es que cuando se ejecuta cmd, se abrirá la simulación VT100. De hecho, un enfoque más "correcto" es utilizar SetConsoleMode proporcionado por Windows.

¿Cómo usar el nuevo soporte para secuencias de escape ANSI en la consola de Windows 10?icono

Linux no necesita este sistema operativo ('')

Si está interesado, puede averiguar cómo las bibliotecas como IPython inician esta simulación VT100.

otro

La impresión puede ser sobrescrito o varios paquetes print_info, print_warning, print_error funciones y similares.

O todos pueden usar su propia función de impresión. Por ejemplo wyh_print, puede cambiar libremente el registro de todos localmente y agregar colores sin afectar a los demás.

Si se puede combinar con el registro y configurar diferentes niveles, los colores de los registros de diferentes módulos serán geniales.

Referencia principal

 

https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-terminal-in-python stackoverflow.com

 

https://stackoverflow.com/questions/2048509/how-to-echo-with-different-colors-in-the-windows-command-line stackoverflow.com

 

https://en.wikipedia.org/wiki/ANSI_escape_code en.wikipedia.org

 

https://docs.microsoft.com/en-us/windows/console/setconsolemode?redirectedfrom=MSDN#ENABLE_VIRTUAL_TERMINAL_PROCESSING docs.microsoft.com

 

Prima

Las pilas mencionadas anteriormente no son efectivas en IDLE, pero es cierto que se pueden producir varios colores en IDLE. Olvidé dónde lo copié, pero el siguiente código puede imprimir caracteres de color en IDLE

import sys

try:
    shell = sys.stdout.shell
except AttributeError:
    raise RuntimeError("you must run this program in IDLE")

shell.write("Wanna go explore? ","KEYWORD")
shell.write("OPTIONS","STRING")
shell.write(" : ","KEYWORD")
shell.write("Yes","DEFINITION")
shell.write(" or ","KEYWORD")
shell.write("No","COMMENT")

print()
print("here are all the valid tags:\n")

valid_tags = ('SYNC', 'stdin', 'BUILTIN', 'STRING', 'console', 'COMMENT', 'stdout',
              'TODO','stderr', 'hit', 'DEFINITION', 'KEYWORD', 'ERROR', 'sel')

for tag in valid_tags:
    shell.write(tag+"\n",tag)
    

Salida en IDLE

 

Publicado el 25-04-2020

Supongo que te gusta

Origin blog.csdn.net/xcntime/article/details/115016933
Recomendado
Clasificación