En Windows, el nuevo Flask imprime caracteres extraños en la consola, en lugar de colorear la línea como en Linux. por ejemplo: "← [37m
Prefiero ir en blanco y negro (como en la versión anterior) si el color no funciona.
2020-05-03 14: 05: 47,398 - INFO - 127.0.0.1 - - [03 / mayo / 2020 14:05:47] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 06: 42,922 - INFO - 127.0.0.1 - - [03 / mayo / 2020 14:06:42] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24,007 - INFO - 127.0.0.1 - - [03 / May / 2020 14:07:24] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24,210 - INFO - 127.0.0.1 - - [03 / May / 2020 14:07:24] "← [37mGET /static/images/favicon.ico HTT
2020-05-03 14: 08: 19,539 - INFO - 127.0.0.1 - - [03 / mayo / 2020 14:08:19] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 09: 15,065 - INFO - 127.0.0.1 - - [03 / mayo / 2020 14:09:15] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 10: 10,579 - INFO - 127.0.0.1 - - [03 / mayo / 2020 14:10:10] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
Env:
Matraz == 1.1.2
Win7 x64
Python 3.6.7 x64
Werkzeug == 1.0.1
No pude duplicar.
Vista del símbolo del sistema:
Terminal de Pycharm:
PyCharm Run:
Estoy ejecutando Windows 10 x64, Python 3.7.4, frasco 1.1.2, Werkzeug 1.0.1
No estoy seguro de cómo explicar esto. En todo caso, es un problema con Click, pero no se supone que Click emita información de color en Windows si colorama no está instalado. He visto más informes de esto desde que cambié a Click, pero no es consistente, como se muestra en las capturas de pantalla anteriores.
Probado en Win7 y Win10 mismo problema, aunque veo que la coloración funciona, pero no para las llamadas REST:
Tengo estos instalados:
haga clic en == 7.1.1
colorama == 0.4.3
registros de colores == 14.0
Todos estos funcionan con la coloración:
de colorama import Fore, Back, Style
imprimir (Fore.RED + 'algo de texto rojo')
print ('033 [31m' + 'texto rojo')
importar clic
click.echo ('033 [31m' + 'texto rojo')
del matraz:
"← [37mGET" <- esto podría escaparse de forma no válida en el código (¿necesita barras diagonales dobles?), Funcionó para mí con single
Pude corregir el problema agregando el siguiente código a mi aplicación de matraz
import os
import sys
if sys.platform.lower() == "win32":
os.system('color')
Consulte https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python para obtener más detalles.
Parece que los corchetes dobles se están filtrando en los registros como sugirió @ mrx23dot .
Pasé más tiempo investigando este problema. La adición de color proviene de click.style
. Aquí está el código relevante de serving.WSGIRequestHandler
:
def log_request(self, code="-", size="-") -> None:
try:
path = uri_to_iri(self.path)
msg = f"{self.command} {path} {self.request_version}"
except AttributeError:
# path isn't set if the requestline was bad
msg = self.requestline
code = str(code)
if click:
color = click.style
if code[0] == "1": # 1xx - Informational
msg = color(msg, bold=True)
elif code[0] == "2": # 2xx - Success
msg = color(msg, fg="white")
elif code == "304": # 304 - Resource Not Modified
msg = color(msg, fg="cyan")
elif code[0] == "3": # 3xx - Redirection
msg = color(msg, fg="green")
elif code == "404": # 404 - Resource Not Found
msg = color(msg, fg="yellow")
elif code[0] == "4": # 4xx - Client Error
msg = color(msg, fg="red", bold=True)
else: # 5xx, or any other response
msg = color(msg, fg="magenta", bold=True)
self.log("info", '"%s" %s %s', msg, code, size)
Puede ver que la función click.style
simplemente envuelve el mensaje inicial en códigos de estilo ANSI. Para Linux y OS X, los códigos ANSI son compatibles de forma predeterminada, por lo que esos usuarios no notarán este problema. Sin embargo, en Windows, el terminal no lo admite de forma predeterminada. Si usa Windows 10, una solución alternativa simple es usar el siguiente comando para habilitar el estilo ANSI:
import sys
import os
if sys.platform.lower() == 'win32':
os.system('color')
Esto abordará la mayoría de los usuarios con el problema, pero es posible que no solucione algunos casos extremos (por ejemplo, distribuciones unix integradas o de tamaño reducido). La os.system('color')
(o en realidad cualquier llamada os.system
) se puede colocar en casi cualquier lugar del código base. Siempre que se llame antes de que se imprima la salida, la salida se mostrará correctamente coloreada. Esta es probablemente la razón por la que los usuarios de PyCharm no notan el error. La terminal PyCharm Python probablemente hace una llamada os.system
para manejar la salida de texto en color.
Entonces, de la forma en que lo veo, hay 2 preguntas:
os.system
?os.system
? Solo necesita ser llamado una vez, así que quizás podría agregarse a WSGIRequestHandler.__init__
? Probablemente haya mejores opciones, pero eso es todo lo que puedo pensar en este momento.Pude corregir el problema agregando el siguiente código a mi aplicación de matraz
import os import sys if sys.platform.lower() == "win32": os.system('color')
Consulte https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python para obtener más detalles.
Parece que los corchetes dobles se están filtrando en los registros como sugirió @ mrx23dot .
Gracias. agregue el código en config.py, funciona para mí. 😀
Comentario más útil
Pude corregir el problema agregando el siguiente código a mi aplicación de matraz
Consulte https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python para obtener más detalles.
Parece que los corchetes dobles se están filtrando en los registros como sugirió @ mrx23dot .