¿Cómo puedo enviar texto coloreado a la terminal, en Python? ¿Cuál es el mejor símbolo Unicode para representar un bloque sólido?
python
unicode
terminal
ansi-colors
aboSamoor
fuente
fuente
█
único problema es que se extiende ASCII, tal vez podría hacerlo funcionarhttp://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
Respuestas:
Esto depende un poco de la plataforma en la que se encuentre. La forma más común de hacerlo es imprimir secuencias de escape ANSI. Para un ejemplo simple, aquí hay un código de Python de los scripts de compilación de Blender :
Para usar un código como este, puedes hacer algo como
o, con Python3.6 +:
Esto funcionará en unixes, incluidos OS X, Linux y Windows (siempre que use ANSICON , o en Windows 10 siempre que habilite la emulación VT100 ). Hay códigos ansi para configurar el color, mover el cursor y más.
Si te vas a complicar con esto (y parece que lo estás haciendo si estás escribiendo un juego), deberías mirar el módulo de "maldiciones", que maneja muchas de las partes complicadas de esto por ti. El Python maldice cómo es una buena introducción.
Si no está utilizando ASCII extendido (es decir, no en una PC), está atrapado con los caracteres ascii por debajo de 127, y '#' o '@' es probablemente su mejor opción para un bloque. Si puede asegurarse de que su terminal está utilizando un juego de caracteres ascii extendido de IBM , tiene muchas más opciones. Los caracteres 176, 177, 178 y 219 son los "caracteres de bloque".
Algunos programas modernos basados en texto, como "Dwarf Fortress", emulan el modo de texto en modo gráfico y usan imágenes de la fuente clásica de PC. Puede encontrar algunos de estos mapas de bits que puede usar en la Wiki de Dwarf Fortress (conjuntos de fichas hechas por el usuario ).
El concurso de demostración de modo de texto tiene más recursos para hacer gráficos en modo de texto.
Hmm ... creo que me dejé llevar por esta respuesta. Sin embargo, estoy en medio de la planificación de un épico juego de aventuras basado en texto. ¡Buena suerte con tu texto a color!
fuente
tput
, como tal , puesto que produce código más portable.disable
es cuando canaliza la salida a un archivo; Si bien las herramientas comocat
pueden admitir colores, generalmente es mejor no imprimir información de color en los archivos.import ctypes;
kernel32 = ctypes.WinDLL('kernel32');
hStdOut = kernel32.GetStdHandle(-11);
mode = ctypes.c_ulong();
kernel32.GetConsoleMode(hStdOut, ctypes.byref(mode));
mode.value |= 4;
kernel32.SetConsoleMode(hStdOut, mode)
.Me sorprende que nadie haya mencionado el módulo Python termcolor . El uso es bastante simple:
O en Python 3:
Sin embargo, puede que no sea lo suficientemente sofisticado para la programación de juegos y los "bloques de colores" que desea hacer ...
fuente
termcolor.COLORS
te da una lista de coloresos.system('color')
primero, luego las secuencias de escape ANSI comienzan a funcionar.La respuesta es Colorama para todos los colores multiplataforma en Python.
Una captura de pantalla de ejemplo de Python 3.6:
fuente
<b>bold</b>
) para agregar estilo al texto del terminalImprima una cadena que comience un color / estilo, luego la cadena, luego finalice el cambio de color / estilo con
'\x1b[0m'
:Obtenga una tabla de opciones de formato para el texto del shell con el siguiente código:
Ejemplo claro sobre oscuro (completo)
Ejemplo de oscuridad sobre luz (parcial)
fuente
Defina una cadena que comience un color y una cadena que termine el color, luego imprima su texto con la cadena inicial al frente y la cadena final al final.
Esto produce lo siguiente en
bash
,urxvt
con un esquema de color estilo Zenburn:A través de la experimentación, podemos obtener más colores:
Nota:
\33[5m
y\33[6m
están parpadeando.De esta manera podemos crear una colección a todo color:
Aquí está el código para generar la prueba:
fuente
\33[0m
oCEND
arriba.Desea aprender sobre las secuencias de escape ANSI. Aquí hay un breve ejemplo:
Para obtener más información, visite http://en.wikipedia.org/wiki/ANSI_escape_code
Para un carácter de bloque, intente con un carácter unicode como \ u2588:
Poniendolo todo junto:
fuente
def d(*v): return '\x1B['+';'.join(map(str, v))+'m'
entoncesprint ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
Estoy respondiendo porque he descubierto una forma de usar códigos ANSI en Windows 10, para que pueda cambiar el color del texto sin ningún módulo que no esté integrado:
La línea que hace que esto funcione es
os.system("")
, o cualquier otra llamada al sistema, que le permite imprimir códigos ANSI en la Terminal:Nota: aunque esto ofrece las mismas opciones que otras opciones de Windows, Windows no es totalmente compatible con los códigos ANSI, incluso con este truco. No todos los colores de decoración de texto funcionan y todos los colores 'brillantes' (Códigos 90-97 y 100-107) se muestran igual que los colores normales (Códigos 30-37 y 40-47)
Editar : Gracias a @jl por encontrar un método aún más corto.
tl; dr : Agregar
os.system("")
cerca de la parte superior de su archivo.Versión de Python: 3.6.7
fuente
if sys.platform.lower() == "win32": os.system('color')
aún más simplemente reemplazándola por soloos.system('')
. No se necesita ninguna condición, y el código se ejecuta tanto en Windows 10 como en Linux (cuando lo probé). Como puede ver, no tiene que hacer una llamada al sistemacolor
. Las llamadas adir
,cd
,abcdef
, y sólo un trabajo fino cadena vacía (aunque las cadenas no vacías probablemente el resultado de impresión que no quiere ver).Mi forma favorita es con la biblioteca Blessings (divulgación completa: la escribí). Por ejemplo:
Para imprimir ladrillos de colores, la forma más confiable es imprimir espacios con colores de fondo. Utilizo esta técnica para dibujar la barra de progreso en nariz progresiva :
También puede imprimir en ubicaciones específicas:
Si tiene que jugar con otras capacidades de terminal en el transcurso de su juego, también puede hacerlo. Puede usar el formato de cadena estándar de Python para mantenerlo legible:
Lo bueno de Blessings es que hace todo lo posible para trabajar en todo tipo de terminales, no solo en los de color ANSI (abrumadoramente comunes). También mantiene secuencias de escape ilegibles fuera de su código mientras se mantiene conciso para usar. ¡Que te diviertas!
fuente
getattr
si lo necesita. O más probablemente, solo cree la cadena de formato dinámicamente en su lugar.can just pass
una función python.pocilga es similar a Colorama, pero es menos detallado, soportes de 8 bits y 24 bits de colores (RGB), le permite registrar sus propios estilos, soportes desconectado, es muy flexible, bien documentados y más.
Ejemplos:
huellas dactilares:
Manifestación:
fuente
generó una clase con todos los colores usando un bucle for para iterar cada combinación de color hasta 100, luego escribió una clase con colores python. Copia y pega como quieras, GPLv2 por mí:
fuente
Prueba este código simple
fuente
En Windows puede usar el módulo 'win32console' (disponible en algunas distribuciones de Python) o el módulo 'ctypes' (Python 2.5 y superior) para acceder a la API de Win32.
Para ver el código completo que admite ambas formas, consulte el código de informes de la consola de color de Testoob .
ejemplo de ctypes:
fuente
Estúpidamente simple basado en la respuesta de @ joeld
Entonces solo
fuente
print
reemplazos ? Objeción rescindida.print
una debería asegurarse de replicar adecuadamente su funcionalidad.def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs)
</code>He incluido la respuesta @joeld en un módulo con funciones globales que puedo usar en cualquier parte de mi código.
archivo: log.py
utilizar de la siguiente manera:
fuente
Para Windows no puede imprimir en la consola con colores a menos que esté utilizando win32api.
Para Linux es tan simple como usar print, con las secuencias de escape descritas aquí:
Colores
Para que el personaje se imprima como un cuadro, realmente depende de qué fuente esté utilizando para la ventana de la consola. El símbolo de la libra funciona bien, pero depende de la fuente:
fuente
fuente
Terminé haciendo esto, sentí que era más limpio:
fuente
Basándose en la respuesta @joeld, usando https://pypi.python.org/pypi/lazyme
pip install -U lazyme
:Captura de pantalla:
Algunas actualizaciones de la
color_print
con nuevos formateadores, por ejemplo:Nota:
italic
,fast blinking
ystrikethrough
puede no funcionar en todos los terminales, no funciona en Mac / Ubuntu.P.ej
Captura de pantalla:
fuente
Probar en línea
fuente
observe qué tan bien se
with
mezcla la palabra clave con modificadores como estos que deben restablecerse (usando Python 3 y Colorama):fuente
print(Style.BRIGHT + "Header Test")
y creéprint (Style.DIM + word)
un mensaje realmente agradable.contextlib
con Py3.@contextlib.contextmanager
decorador, ¿no?Puede usar la implementación de Python de la biblioteca curses: http://docs.python.org/library/curses.html
Además, ejecute esto y encontrará su caja:
fuente
Puedes usar CLINT:
Obtenlo de GitHub .
fuente
Sé que llego tarde. Pero tengo una biblioteca llamada ColorIt . Es super simple.
Aquí hay unos ejemplos:
Esto te da:
También vale la pena señalar que esto es multiplataforma y se ha probado en mac, linux y windows.
Es posible que desee probarlo: https://github.com/CodeForeverAndEver/ColorIt
Nota: Parpadeo, cursiva, negrita, etc. se agregarán en unos días.
fuente
Si está programando un juego, ¿tal vez le gustaría cambiar el color de fondo y usar solo espacios? Por ejemplo:
fuente
Si está utilizando Windows, ¡aquí está!
fuente
print("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
Si estás usando Django
instantánea:
(Por lo general, utilizo resultados en color para depurar en el terminal del servidor de ejecución, así que lo agregué)
Puede probar si está instalado en su máquina:
$ python -c "import django; print django.VERSION"
Para instalarlo, verifique: Cómo instalar Django
¡¡Darle una oportunidad!!
fuente
Aquí hay un ejemplo de maldiciones:
fuente
https://raw.github.com/fabric/fabric/master/fabric/colors.py
fuente
Asciimatics proporciona un soporte portátil para crear UI de texto y animaciones:
Asciicast:
fuente
Otro módulo pypi que envuelve la función de impresión python 3:
https://pypi.python.org/pypi/colorprint
Es utilizable en python 2.x si tú también
from __future__ import print
. Aquí hay un ejemplo de python 2 de la página de módulos de pypi:Salidas "¡Hola, mundo!" con las palabras en azul y el signo de exclamación en negrita rojo y parpadeante.
fuente