Di windows, Flask baru mencetak karakter aneh di konsol, bukannya mewarnai garis seperti di linux. misalnya: "← [37m
Saya lebih suka hitam / putih (seperti di versi sebelumnya) jika pewarnaan tidak berhasil.
2020-05-03 14: 05: 47,398 - INFO - 127.0.0.1 - - [03 / Mei / 2020 14:05:47] "← [37mGET / hasil HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 06: 42,922 - INFO - 127.0.0.1 - - [03 / Mei / 2020 14:06:42] "← [37mGET / hasil HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24,007 - INFO - 127.0.0.1 - - [03 / Mei / 2020 14:07:24] "← [37mGET / hasil HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24,210 - INFO - 127.0.0.1 - - [03 / Mei / 2020 14:07:24] "← [37mGET /static/images/favicon.ico HTT
2020-05-03 14: 08: 19,539 - INFO - 127.0.0.1 - - [03 / Mei / 2020 14:08:19] "← [37mGET / hasil HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 09: 15,065 - INFO - 127.0.0.1 - - [03 / Mei / 2020 14:09:15] "← [37mGET / hasil HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 10: 10,579 - INFO - 127.0.0.1 - - [03 / Mei / 2020 14:10:10] "← [37mGET / hasil HTTP / 1.1 ← [0m" 200 -
Env:
Flask == 1.1.2
Win7 x64
Python 3.6.7 x64
Werkzeug == 1.0.1
Saya tidak dapat menggandakan.
Tampilan Command Prompt:
Terminal Pycharm:
PyCharm Run:
Saya menjalankan Windows 10 x64, Python 3.7.4, flask 1.1.2, Werkzeug 1.0.1
Saya tidak begitu yakin bagaimana menjelaskannya. Jika ada, adalah masalah dengan Click, tetapi Click tidak seharusnya memancarkan info warna pada Windows jika colorama tidak diinstal. Saya telah melihat lebih banyak laporan tentang ini sejak beralih ke Klik, tetapi tidak konsisten, seperti yang ditunjukkan pada tangkapan layar sebelumnya.
Diuji pada Win7 dan Win10 masalah yang sama, meskipun saya melihat pewarnaan berfungsi, hanya tidak untuk panggilan REST:
Saya telah menginstal ini:
klik == 7.1.1
colorama == 0.4.3
colorlogs == 14.0
Ini semua bekerja dengan pewarnaan:
dari colorama import Fore, Back, Style
cetak (Fore.RED + 'beberapa teks merah')
cetak ('033 [31m' + 'beberapa teks merah')
klik impor
click.echo ('033 [31m' + 'beberapa teks merah')
dari Flask:
"← [37mGET" <- ini mungkin lolos secara tidak valid dalam kode (perlu garis miring ke belakang ganda?), Itu berhasil untuk saya dengan satu
Saya dapat memperbaiki masalah ini dengan menambahkan kode berikut ke aplikasi flask saya
import os
import sys
if sys.platform.lower() == "win32":
os.system('color')
Lihat https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python untuk detailnya.
Tampaknya tanda kurung ganda sedang difilter di log seperti yang disarankan @ mrx23dot .
Saya menghabiskan lebih banyak waktu untuk menyelidiki masalah ini. Penambahan warna berasal dari click.style
. Berikut kode yang relevan dari 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)
Anda dapat melihat bahwa fungsi click.style
hanya membungkus pesan awal dalam kode gaya ANSI. Untuk Linux dan OS X, kode ANSI didukung secara default, sehingga pengguna tersebut tidak akan menyadari masalah ini. Namun, di Windows, terminal tidak mendukung ini secara default. Jika menggunakan Windows 10, solusi sederhana adalah menggunakan perintah berikut untuk mengaktifkan gaya ANSI:
import sys
import os
if sys.platform.lower() == 'win32':
os.system('color')
Ini akan mengatasi sebagian besar pengguna dengan masalah tersebut, tetapi mungkin tidak memperbaiki beberapa kasus edge (misalnya footprint kecil atau distro unix tertanam). os.system('color')
(atau benar-benar panggilan os.system
) dapat diletakkan hampir di mana saja dalam basis kode. Selama dipanggil sebelum keluaran dicetak, keluaran akan muncul dengan warna yang sesuai. Ini mungkin alasan mengapa pengguna PyCharm tidak memperhatikan bug tersebut. Terminal pyCharm python kemungkinan membuat panggilan os.system
untuk menangani keluaran teks berwarna.
Jadi menurut saya ada 2 pertanyaan:
os.system
?os.system
? Ini hanya perlu dipanggil sekali, jadi mungkin bisa ditambahkan ke WSGIRequestHandler.__init__
? Mungkin ada pilihan yang lebih baik, tapi hanya itu yang bisa saya pikirkan sekarang.Saya dapat memperbaiki masalah ini dengan menambahkan kode berikut ke aplikasi flask saya
import os import sys if sys.platform.lower() == "win32": os.system('color')
Lihat https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python untuk detailnya.
Tampaknya tanda kurung ganda sedang difilter di log seperti yang disarankan @ mrx23dot .
Terima kasih. tambahkan kode di config.py, ini berfungsi untuk saya. 😀
Komentar yang paling membantu
Saya dapat memperbaiki masalah ini dengan menambahkan kode berikut ke aplikasi flask saya
Lihat https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python untuk detailnya.
Tampaknya tanda kurung ganda sedang difilter di log seperti yang disarankan @ mrx23dot .