Fabric: Soporte de color ANSI

Creado en 19 ago. 2011  ·  19Comentarios  ·  Fuente: fabric/fabric

Descripción

  • Fácil capacidad para que tanto el código interno como los usuarios especifiquen que (al menos) las líneas completas tienen un color ANSI dado, si no palabras o partes arbitrarias de cadenas de salida.
  • Indicador global para deshabilitar ANSI para que cualquiera que se preocupe pueda apagarlo (por ejemplo, para alguien que esté escribiendo el propio Fab, o lo que sea).
  • ¿Varias llamadas de salida internas hacen uso del color de modo que, por ejemplo, las líneas de "ejecución de la tarea X" sean azules, las líneas continuas sean ... eh ... amarillas? verde ?, los abortos / errores son rojos, etc., etc.

Sería bueno aprovechar una biblioteca externa para esto en lugar de reinventar la rueda para la mecánica real: vea lo que hay ahí fuera.


ok, hay un puñado de técnica anterior:

Ideas generales:

  • Funciones unarias. print(red(blink("text") + "non blinking text")) etc. Parece bastante fácil de usar, posiblemente algunos puntos complicados en la implementación real; consulte Term :: ANSIColor ( fuente ) para obtener ideas, tal vez.
  • Mapeo simple muerto de los códigos a constantes / vars. (Posiblemente por qué nadie ha hecho una biblioteca para esto, es muy simple). Por ejemplo, print(RED + BLINK + "text" + CLEAR + RED + "non blinking text" + CLEAR) .

Mapas de código ANSI:

Más notas:

  • aparentemente hay problemas con esto en los terminales de Windows, por lo que es posible que desee / necesite una especie de if win32: env.disable_colors = True automática.
  • tienen expresiones regulares que pueden activar ciertos aspectos destacados, de modo que, por ejemplo, los "mensajes de error" coincidentes de stdout / stderr pueden ser de color rojo o cualquier otra cosa. Es decir, "Permiso denegado" y similares. (ver también: capistrano-colors)
  • si / cuando registramos (# 57), puede tener sentido desactivar los colores de los registros, o convertirlo en una opción en caso de que alguien realmente quiera los códigos ANSI en sus archivos de registro.

Estado actual:

  • Implementé una biblioteca interna barebones como fabric.colors en Fabric 0.9.2
  • Aún no lo usamos en ninguna parte del núcleo de Fabric; el único lugar en el que lo uso es en una tarea que rara vez se usa
  • Todavía puede valer la pena usar una biblioteca de terceros si / cuando logramos aprovechar seriamente el color en Fabric.

    • Sin embargo, a menos que se proporcione un puente al módulo colors incluido actualmente, es probable que se rompa la compatibilidad con versiones anteriores.

    • Por lo tanto, escriba un puente de este tipo, no se moleste en usar una biblioteca de terceros o espere hasta la versión 2.x


Originalmente presentado por Jeff Forcier ( bitprophet ) en 2009-11-11 a las 05:46 pm EST

Relaciones

  • Relacionado con # 151: Hacer que las declaraciones fabfile print () sean controlables a través de controles de salida
  • Relacionado con # 240: Use colores de fondo en fabric.colors
  • Relacionado con el n. ° 57: admite el registro completo en el archivo
  • Relacionado con # 363: Considere la posibilidad de integrar Clint
Feature UI

Comentario más útil

Para personas como yo que ejecutan Windows y tratan de hacer que cosas como run("ls --color") vean bien, me gustaría señalar que esto funciona:

  1. Instale el módulo colorama ( pip install colorama )
  2. Agregue este código a fabfile.py :
try:
    import colorama
    colorama.init()
except ImportError:
    print "WARNING: Some tasks may be hard to read unless you install colorama."

Todos 19 comentarios

Jeff Forcier (


Empecé a jugar con esto. Un esquema de color posible, usando nombres de host magenta, tareas verdes y líneas azules continuas:

colors

(Puede ignorar el texto real, es solo un resultado duplicado de una ejecución de tarea real. No, no se puede acceder públicamente a los dominios involucrados :))


el 2009-11-12 a las 02:10 pm EST

Jeff Forcier (


Otro ejemplo, con adiciones:

  • amarillo para stderr
  • rojo para mensajes de aborto (probablemente también advertencias).

colors2


el 2009-11-12 a las 02:34 pm EST

Jeff Forcier (


Además, nunca he dicho que no use estupideces como mensajes de prueba :) sin ofender a la madre de nadie.


el 2009-11-12 a las 02:35 pm EST

Nick Trew ( vxnick ) publicó:


Considere agregar env.always_use_bold (o similar).


el 2010-04-14 a las 10:06 am EDT

Kenneth Reitz ( kennethreitz ) publicó:


Recomiendo encarecidamente colorama:

http://pypi.python.org/pypi/colorama


el 2010-10-11 a las 10:49 pm EDT

Rick Harding ( mitechie ) publicó:


Kenneth Reitz escribió:

Recomiendo encarecidamente colorama:

http://pypi.python.org/pypi/colorama

+1 en colorama, muy bonito y fácil de envolver, así que lo haces opcional. Si colorama está instalado, puede imprimir con colores, de lo contrario, lisos.


el 2011-03-14 a las 11:25 am EDT

¡fabuloso es una gran biblioteca para trabajar con colores en Python! No sé colorama, pero si solo necesitamos colores de 8 bits, puedo hacer una función para hacerlo con solo 20 líneas de código (y no dependerá de otra biblioteca). Pero si necesitamos un soporte más completo, creo que fabuloso será una gran elección.

FWIW Actualmente soy un gran defensor de los terminales de 256 colores :) Agregaré fabuloso a la lista en la parte superior, ¡gracias!

mi función de color personalizado.

def colorize(msg, fg='green', bg='black', style='reset'):
    color_map = dict(black=0, red=1, green=2, yellow=3, blue=4, magenta=5, cyan=6, white=7)
    style_map = dict(reset=0, bold=1, underscore=4, blink=5, reverse=7, conceal=8, underline=4)
    return '\033[3%d;4%d;%dm%s\033[0m' % (color_map[fg], color_map[bg], style_map[style], msg)

554 incluye una captura de pantalla y posiblemente algún código, que se debe considerar junto con lo anterior.

Esta tarde, tuve la idea de colorear los nombres de host en función del nombre de host en sí. De tal manera que cada nombre de host tenga un color diferente.

Voy a jugar con esto. No estoy seguro de a dónde va.

Leí este problema y parece que el trabajo para colorear la salida se ha desvanecido un poco. ¿Alguna razón en particular para eso? ¿Ha sido abandonado de alguna manera?

Con mucho gusto lo intentaré.

He mirado algunas de las bibliotecas mencionadas anteriormente y soy un poco escéptico. Hasta ahora, fabuloso es el que menos me preocupa. Pero no estoy seguro de si funcionará en Windows (principalmente debido al archivo llamado xterm256.(py|c) ).

También me encontré con

La razón de mi escepticismo es que me parece que todas esas bibliotecas están tratando de hacer demasiado, si lo único que necesitamos es texto en color.

Mi solución de referencia fue un fragmento muy simple escrito por Nadia Alramli. Desafortunadamente, su blog ya no está en línea, pero después de buscar en Google, encontré su página de github . Es muy simple y hace lo que debería. Aunque tampoco lo he probado nunca en Windows.

También había una receta realmente agradable en el libro de cocina de ActiveState que usaba de vez en cuando. Pero no puedo recuperar esto. Tendré que seguir buscando en Google.

@exhuma ¡ Gracias por pinchar, apreciamos mucho las notas! Dudo que Fab 1 vea una gran coloración (aunque creo que recientemente fusioné una cosa de "mostrar errores en rojo"? Memoria confusa) pero el plan es tenerlo en Fab 2 desde el principio, donde los mecanismos de salida deberían escribirse más inteligentemente. Entonces esta información sigue siendo útil.

No te preocupes ... y gracias por la actualización. Casi siempre me olvidé de esta publicación ... Hago demasiadas cosas y demasiadas cosas en paralelo :(

Pero, mientras tanto, también estaba jugando con las bendiciones. Y parece que "simplemente funciona". Incluso compatibilidad con 256 colores (incluso si no está documentado). Mis errores están aquí: https://github.com/exhuma/blessings/compare/256-colour-support La salida en la consola se veía bien.

Además, con respecto a mi declaración anterior de que todas las bibliotecas mencionadas intentan hacer demasiado, es _menos_ cierto para las bendiciones. Es bastante minimalista.

Sí, las bendiciones se destacaron por ser bastante radicales cuando lo miré por última vez. Intentaré recordar mirarlo primero para Fab 2 :)

Bendiciones de FWIW no es compatible con Windows, colorama sí (esto es lo que estamos usando en pip para eso). O mejor dicho, las bendiciones necesitan colorama para obtener color en Windows.

Para personas como yo que ejecutan Windows y tratan de hacer que cosas como run("ls --color") vean bien, me gustaría señalar que esto funciona:

  1. Instale el módulo colorama ( pip install colorama )
  2. Agregue este código a fabfile.py :
try:
    import colorama
    colorama.init()
except ImportError:
    print "WARNING: Some tasks may be hard to read unless you install colorama."

¿Alguna actualización sobre esto? Estoy buscando una opción para colorear los comandos remotos. Hasta ahora veo que los escapes ANSI de los comandos remotos se muestran correctamente.

Aún así, me gustaría poder cambiar la salida del comando de prefijo y agregarle escapes ANSI, tal vez un color diferente para local y remoto, también un color diferente para stderr (err) vs stdout (out).

Agregué PR pyinvoke / invoke # 663 para respaldar esto. Tenga en cuenta que esto es principalmente un PR para que la bola vuelva a rodar. No utiliza cualquiera de las bibliotecas mencionadas, ya que aún no está claro cómo deben integrarse. Vea las notas sobre pyinvoke / invoke # 663

Estoy absolutamente dispuesto a reemplazar mi propio código con una biblioteca de terceros.

¿Fue útil esta página
0 / 5 - 0 calificaciones