Unter Windows druckt die neue Flasche seltsame Zeichen auf der Konsole, anstatt die Linie wie unter Linux zu färben. zB: "← [37m
Ich würde lieber schwarz / weiß (wie in der vorherigen Version) gehen, wenn das Färben nicht funktioniert.
2020-05-03 14: 05: 47,398 - INFO - 127.0.0.1 - - [03 / Mai / 2020 14:05:47] "← [37mGET / Ergebnis HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 06: 42,922 - INFO - 127.0.0.1 - - [03 / Mai / 2020 14:06:42] "← [37mGET / Ergebnis HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24,007 - INFO - 127.0.0.1 - - [03 / Mai / 2020 14:07:24] "← [37mGET / Ergebnis 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 / Ergebnis HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 09: 15,065 - INFO - 127.0.0.1 - - [03 / Mai / 2020 14:09:15] "← [37mGET / Ergebnis HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 10: 10,579 - INFO - 127.0.0.1 - - [03 / Mai / 2020 14:10:10] "← [37mGET / Ergebnis HTTP / 1.1 ← [0m" 200 -
Env:
Kolben == 1.1.2
Win7 x64
Python 3.6.7 x64
Werkzeug == 1.0.1
Ich konnte nicht duplizieren.
Eingabeaufforderungsansicht:
Pycharm Terminal:
PyCharm Run:
Ich verwende Windows 10 x64, Python 3.7.4, Flasche 1.1.2, Werkzeug 1.0.1
Ich bin mir nicht sicher, wie ich das erklären soll. Wenn überhaupt, liegt ein Problem mit Click vor, aber Click soll unter Windows keine Farbinformationen ausgeben, wenn colorama nicht installiert ist. Ich habe seit dem Wechsel zu Click mehr Berichte darüber gesehen, aber es ist nicht konsistent, wie in den vorherigen Screenshots gezeigt.
Getestet auf Win7 und Win10 das gleiche Problem, obwohl ich sehe, dass das Färben funktioniert, nur nicht für REST-Aufrufe:
Ich habe diese installiert:
Klicken Sie auf == 7.1.1
colorama == 0.4.3
Colouredlogs == 14.0
Diese arbeiten alle mit Färbung:
von colorama importieren Fore, Back, Style
print (Fore.RED + 'etwas roter Text')
print ('033 [31m' + 'etwas roter Text')
Importklick
click.echo ('033 [31m' + 'etwas roter Text')
von Flask:
"← [37mGET" <- dies könnte im Code ungültig maskiert werden (benötigt doppelte Schrägstriche?), Es hat bei mir mit einfach funktioniert
Ich konnte das Problem beheben, indem ich meiner Kolben-App den folgenden Code hinzufügte
import os
import sys
if sys.platform.lower() == "win32":
os.system('color')
Weitere Informationen finden Sie unter https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python .
Es scheint, dass die doppelten Klammern in den Protokollen gefiltert werden, wie von @ mrx23dot vorgeschlagen.
Ich habe noch etwas Zeit damit verbracht, dieses Problem zu untersuchen. Der Farbzusatz stammt von click.style
. Hier ist der relevante Code von 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)
Sie können sehen, dass die Funktion click.style
die ursprüngliche Nachricht einfach in ANSI-Stilcodes einschließt. Unter Linux und OS X werden ANSI-Codes standardmäßig unterstützt, sodass diese Benutzer dieses Problem nicht bemerken. Unter Windows unterstützt das Terminal dies jedoch standardmäßig nicht. Wenn Sie Windows 10 verwenden, besteht eine einfache Problemumgehung darin, den folgenden Befehl zu verwenden, um das ANSI-Styling zu aktivieren:
import sys
import os
if sys.platform.lower() == 'win32':
os.system('color')
Dies wird die meisten Benutzer mit dem Problem ansprechen, einige Randfälle jedoch möglicherweise nicht beheben (z. B. geringer Platzbedarf oder eingebettete Unix-Distributionen). Das os.system('color')
(oder wirklich jeder os.system
-Anruf) kann fast überall in der Codebasis platziert werden. Solange es aufgerufen wird, bevor die Ausgabe gedruckt wird, wird die Ausgabe in der richtigen Farbe angezeigt. Dies ist wahrscheinlich der Grund, warum Benutzer von PyCharm den Fehler nicht bemerken. Das PyCharm-Python-Terminal ruft wahrscheinlich os.system
auf, um die Ausgabe von farbigem Text zu verarbeiten.
So wie ich das sehe, gibt es zwei Fragen:
os.system
anzurufen?os.system
hinzufügen? Es muss nur einmal aufgerufen werden, also könnte es vielleicht zu WSGIRequestHandler.__init__
hinzugefügt werden? Es gibt wahrscheinlich bessere Optionen, aber das ist alles, woran ich jetzt denken kann.Ich konnte das Problem beheben, indem ich meiner Kolben-App den folgenden Code hinzufügte
import os import sys if sys.platform.lower() == "win32": os.system('color')
Weitere Informationen finden Sie unter https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python .
Es scheint, dass die doppelten Klammern in den Protokollen gefiltert werden, wie von @ mrx23dot vorgeschlagen.
Vielen Dank. Füge den Code in config.py hinzu, er funktioniert bei mir. 😀
Hilfreichster Kommentar
Ich konnte das Problem beheben, indem ich meiner Kolben-App den folgenden Code hinzufügte
Weitere Informationen finden Sie unter https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python .
Es scheint, dass die doppelten Klammern in den Protokollen gefiltert werden, wie von @ mrx23dot vorgeschlagen.