Sous Windows, le nouveau Flask imprime des caractères étranges sur la console, au lieu de colorer la ligne comme sur Linux. par exemple: "← [37m
Je préférerais passer en noir / blanc (comme dans la version précédente) si la coloration ne fonctionne pas.
2020-05-03 14: 05: 47,398 - INFO - 127.0.0.1 - - [03 / mai / 2020 14:05:47] "← [37mGET / résultat HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 06: 42,922 - INFO - 127.0.0.1 - - [03 / mai / 2020 14:06:42] "← [37mGET / résultat HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24,007 - INFO - 127.0.0.1 - - [03 / mai / 2020 14:07:24] "← [37mGET / résultat HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24,210 - INFO - 127.0.0.1 - - [03 / mai / 2020 14:07:24] "← [37mGET /static/images/favicon.ico HTT
2020-05-03 14: 08: 19,539 - INFO - 127.0.0.1 - - [03 / mai / 2020 14:08:19] "← [37mGET / résultat HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 09: 15,065 - INFO - 127.0.0.1 - - [03 / mai / 2020 14:09:15] "← [37mGET / résultat HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 10: 10,579 - INFO - 127.0.0.1 - - [03 / mai / 2020 14:10:10] "← [37mGET / résultat HTTP / 1.1 ← [0m" 200 -
Env:
Flacon == 1.1.2
Win7 x64
Python 3.6.7 x64
Werkzeug == 1.0.1
Je n'ai pas pu dupliquer.
Vue d'invite de commandes:
Terminal Pycharm:
PyCharm Run:
J'utilise Windows 10 x64, Python 3.7.4, flask 1.1.2, Werkzeug 1.0.1
Je ne sais pas vraiment comment expliquer cela. Si quelque chose est un problème avec Click, mais Click n'est pas censé émettre des informations de couleur sur Windows si colorama n'est pas installé. J'ai vu plus de rapports à ce sujet depuis le passage à Click, mais ce n'est pas cohérent, comme le montrent les captures d'écran précédentes.
Testé sur Win7 et Win10, même problème, bien que je vois la coloration fonctionner, mais pas pour les appels REST:
J'ai installé ces derniers:
cliquez == 7.1.1
colorama == 0.4.3
bûches colorées == 14,0
Ceux-ci fonctionnent tous avec la coloration:
à partir de l'importation de colorama Fore, Back, Style
print (Fore.RED + 'un texte rouge')
print ('033 [31m' + 'du texte rouge')
import clic
click.echo ('033 [31m' + 'du texte rouge')
de Flask:
"← [37mGET" <- cela pourrait être échappé de manière incorrecte dans le code (nécessite des doubles barres obliques inverses?), Cela a fonctionné pour moi avec un simple
J'ai pu corriger le problème en ajoutant le code suivant à mon application flask
import os
import sys
if sys.platform.lower() == "win32":
os.system('color')
Voir https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python pour plus de détails.
Il semble que les doubles crochets soient filtrés dans les journaux comme le suggère @ mrx23dot .
J'ai passé un peu plus de temps à enquêter sur ce problème. L'ajout de couleur provient de click.style
. Voici le code pertinent 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)
Vous pouvez voir que la fonction click.style
enveloppe simplement le message initial dans des codes de style ANSI. Pour Linux et OS X, les codes ANSI sont pris en charge par défaut, de sorte que ces utilisateurs ne remarqueront pas ce problème. Cependant, sous Windows, le terminal ne prend pas en charge cela par défaut. Si vous utilisez Windows 10, une solution simple consiste à utiliser la commande suivante pour activer le style ANSI:
import sys
import os
if sys.platform.lower() == 'win32':
os.system('color')
Cela répondra à la plupart des utilisateurs avec le problème, mais pourrait ne pas résoudre certains cas extrêmes (par exemple, les distributions Unix à faible encombrement ou intégrées). Le os.system('color')
(ou vraiment n'importe quel appel os.system
) peut être placé presque n'importe où dans la base de code. Tant qu'elle est appelée avant l'impression de la sortie, la sortie apparaîtra correctement colorée. C'est probablement pourquoi les utilisateurs de PyCharm ne remarquent pas le bogue. Le terminal python PyCharm effectue probablement un appel os.system
pour gérer la sortie de texte coloré.
Donc, d'après moi, il y a 2 questions:
os.system
?os.system
? Il ne doit être appelé qu'une seule fois, alors peut-être pourrait-il être ajouté à WSGIRequestHandler.__init__
? Il existe probablement de meilleures options, mais c'est tout ce à quoi je peux penser pour le moment.J'ai pu corriger le problème en ajoutant le code suivant à mon application flask
import os import sys if sys.platform.lower() == "win32": os.system('color')
Voir https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python pour plus de détails.
Il semble que les doubles crochets soient filtrés dans les journaux comme le suggère @ mrx23dot .
Merci. ajoutez le code dans config.py, ça marche pour moi. 😀
Commentaire le plus utile
J'ai pu corriger le problème en ajoutant le code suivant à mon application flask
Voir https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python pour plus de détails.
Il semble que les doubles crochets soient filtrés dans les journaux comme le suggère @ mrx23dot .