No windows, o novo Flask imprime caracteres estranhos no console, ao invés de colorir a linha como no Linux. por exemplo: "← [37m
Prefiro usar preto / branco (como na versão anterior) se a coloração não funcionar.
2020-05-03 14: 05: 47.398 - INFO - 127.0.0.1 - - [03 / maio / 2020 14:05:47] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 06: 42.922 - INFO - 127.0.0.1 - - [03 / maio / 2020 14:06:42] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24.007 - INFO - 127.0.0.1 - - [03 / maio / 2020 14:07:24] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24.210 - INFO - 127.0.0.1 - - [03 / maio / 2020 14:07:24] "← [37mGET /static/images/favicon.ico HTT
2020-05-03 14: 08: 19.539 - INFO - 127.0.0.1 - - [03 / maio / 2020 14:08:19] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 09: 15.065 - INFO - 127.0.0.1 - - [03 / maio / 2020 14:09:15] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 10: 10.579 - INFO - 127.0.0.1 - - [03 / maio / 2020 14:10:10] "← [37mGET / resultado HTTP / 1.1 ← [0m" 200 -
Env:
Frasco == 1.1.2
Win7 x64
Python 3.6.7 x64
Werkzeug == 1.0.1
Não consegui duplicar.
Visualização do prompt de comando:
Terminal Pycharm:
PyCharm Run:
Estou executando o Windows 10 x64, Python 3.7.4, flask 1.1.2, Werkzeug 1.0.1
Não tenho certeza de como explicar isso. Se houver alguma coisa, é um problema com o Click, mas o Click não deve emitir informações de cores no Windows se o colorama não estiver instalado. Tenho visto mais relatos sobre isso desde a mudança para o Click, mas não é consistente, como mostrado nas capturas de tela anteriores.
Testado no Win7 e Win10 com o mesmo problema, embora eu veja a coloração funcionando, mas não para chamadas REST:
Eu tenho estes instalados:
click == 7.1.1
colorama == 0.4.3
colouredlogs == 14.0
Todos funcionam com coloração:
do colorama import Fore, Back, Style
imprimir (Fore.RED + 'algum texto vermelho')
imprimir ('033 [31m' + 'algum texto em vermelho')
clique de importação
click.echo ('033 [31m' + 'algum texto vermelho')
do frasco:
"← [37mGET" <- pode ter escape inválido no código (precisa de barras duplas?), Funcionou para mim com simples
Consegui corrigir o problema adicionando o seguinte código ao meu aplicativo Flask
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 obter detalhes.
Parece que os colchetes duplos estão sendo filtrados nos logs como @ mrx23dot sugeriu.
Passei mais algum tempo investigando esse problema. A adição de cor vem de click.style
. Aqui está o 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)
Você pode ver que a função click.style
está simplesmente envolvendo a mensagem inicial em códigos de estilo ANSI. Para Linux e OS X, os códigos ANSI são suportados por padrão, portanto, esses usuários não perceberão esse problema. No entanto, no Windows, o terminal não suporta isso por padrão. Se estiver usando o Windows 10, uma solução simples é usar o seguinte comando para ativar o estilo ANSI:
import sys
import os
if sys.platform.lower() == 'win32':
os.system('color')
Isso resolverá a maioria dos usuários com o problema, mas pode não corrigir alguns casos extremos (por exemplo, pequenas dimensões ou distros Unix incorporadas). O os.system('color')
(ou realmente qualquer os.system
chamada) pode ser colocado em quase qualquer lugar na base de código. Contanto que seja chamado antes de a saída ser impressa, a saída aparecerá com as cores adequadas. É provavelmente por isso que os usuários do PyCharm não percebem o bug. O terminal PyCharm python provavelmente faz uma chamada os.system
para lidar com a saída de texto colorido.
Portanto, a meu ver, existem 2 questões:
os.system
?os.system
? Ele só precisa ser chamado uma vez, então talvez possa ser adicionado a WSGIRequestHandler.__init__
? Provavelmente, existem opções melhores, mas é tudo o que posso pensar agora.Consegui corrigir o problema adicionando o seguinte código ao meu aplicativo Flask
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 obter detalhes.
Parece que os colchetes duplos estão sendo filtrados nos logs como @ mrx23dot sugeriu.
Obrigado. adicione o código em config.py, ele funciona para mim. 😀
Comentários muito úteis
Consegui corrigir o problema adicionando o seguinte código ao meu aplicativo Flask
Consulte https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python para obter detalhes.
Parece que os colchetes duplos estão sendo filtrados nos logs como @ mrx23dot sugeriu.