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í, \033
es 27 en octal, que es Escape en ASCII. [31m
Significa que las cosas en la parte trasera se vuelven rojas, y [0m
significa que las cosas en la parte trasera se restauran a sus valores predeterminados. [32m
Significa que las cosas en la parte de atrás se vuelven verdes, y [0m
significa 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 [3xm
color de primer plano y [4xm
el color de fondo, que [9xm
es el color de primer plano brillante y [10xm
el 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
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?
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://en.wikipedia.org/wiki/ANSI_escape_code en.wikipedia.org
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