على النوافذ ، تطبع Flask الجديدة أحرفًا غريبة على وحدة التحكم ، بدلاً من تلوين الخط كما هو الحال في Linux. على سبيل المثال: "← [37m
أفضل الذهاب إلى الأسود / الأبيض (كما في الإصدار السابق) إذا لم يعمل التلوين.
2020-05-03 14: 05: 47،398 - INFO - 127.0.0.1 - - [03 / May / 2020 14:05:47] "← [37mGET / نتيجة HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 06: 42،922 - INFO - 127.0.0.1 - - [03 / May / 2020 14:06:42] "← [37mGET / نتيجة HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 07: 24،007 - INFO - 127.0.0.1 - - [03 / May / 2020 14:07:24] "← [37mGET / نتيجة 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 / May / 2020 14:08:19] "← [37mGET / نتيجة HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 09: 15،065 - INFO - 127.0.0.1 - - [03 / May / 2020 14:09:15] "← [37mGET / نتيجة HTTP / 1.1 ← [0m" 200 -
2020-05-03 14: 10: 10،579 - INFO - 127.0.0.1 - - [03 / May / 2020 14:10:10] "← [37mGET / نتيجة HTTP / 1.1 ← [0m" 200 -
Env:
قارورة == 1.1.2
Win7 إلى x64
Python 3.6.7 إلى x64
Werkzeug == 1.0.1
لم أتمكن من التكرار.
عرض موجه الأوامر:
محطة بيشارم:
تشغيل PyCharm:
أنا أقوم بتشغيل Windows 10 x64 و Python 3.7.4 و flask 1.1.2 و Werkzeug 1.0.1
لست متأكدًا حقًا من كيفية شرح ذلك. إذا كان هناك أي شيء ، فهذه مشكلة في Click ، ولكن ليس من المفترض أن يرسل Click معلومات الألوان على Windows إذا لم يتم تثبيت colorama. لقد رأيت المزيد من التقارير عن ذلك منذ التبديل إلى Click ، ولكنها ليست متسقة ، كما هو موضح في لقطات الشاشة السابقة.
تم اختباره على نفس المشكلة Win7 و Win10 ، على الرغم من أنني أرى التلوين يعمل ، ليس فقط لمكالمات REST:
لقد قمت بتثبيت هذه:
انقر == 7.1.1
colorama == 0.4.3
colorlogs == 14.0
كل هذه تعمل مع التلوين:
من كولوراما استيراد الجبهة ، العودة ، ستايل
طباعة (للأحمر الأمامي + "بعض النص الأحمر")
طباعة ('033 [31m' + 'بعض النص الأحمر')
انقر فوق الاستيراد
click.echo ('033 [31m' + 'بعض النص الأحمر')
من Flask:
"← [37mGET" <- قد يتم تخطي هذا بشكل غير صحيح في الكود (يحتاج إلى شُرط مزدوجة للخلف؟) ، لقد نجح معي مع
تمكنت من تصحيح المشكلة عن طريق إضافة الكود التالي إلى تطبيق flask الخاص بي
import os
import sys
if sys.platform.lower() == "win32":
os.system('color')
راجع https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python للحصول على التفاصيل.
يبدو أنه يتم تصفية الأقواس المزدوجة في السجلات كما اقترح @ mrx23dot .
قضيت بعض الوقت في التحقيق في هذه المشكلة. تأتي إضافة اللون من click.style
. هذا هو الرمز ذو الصلة من 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)
يمكنك أن ترى أن الوظيفة click.style
تقوم ببساطة بتغليف الرسالة الأولية في أكواد نمط ANSI. بالنسبة إلى Linux و OS X ، يتم دعم رموز ANSI افتراضيًا ، لذلك لن يلاحظ هؤلاء المستخدمون هذه المشكلة. ومع ذلك ، في Windows ، لا يدعم الجهاز هذا افتراضيًا. إذا كنت تستخدم نظام التشغيل Windows 10 ، فإن الحل البسيط هو استخدام الأمر التالي لتمكين تصميم ANSI:
import sys
import os
if sys.platform.lower() == 'win32':
os.system('color')
سيعالج هذا معظم المستخدمين الذين يعانون من المشكلة ، ولكن قد لا يصلح بعض حالات الحواف (مثل البصمة الصغيرة أو توزيعات يونكس المضمنة). يمكن وضع os.system('color')
(أو أي مكالمة os.system
) تقريبًا في أي مكان في قاعدة الشفرة. طالما يتم استدعاؤه قبل طباعة الإخراج ، سيظهر الإخراج ملونًا بشكل صحيح. ربما هذا هو السبب في أن مستخدمي PyCharm لا يلاحظون الخطأ. من المحتمل أن تقوم محطة PyCharm python باستدعاء os.system
للتعامل مع إخراج النص الملون.
إذن بالطريقة التي أراها هناك سؤالان:
os.system
؟os.system
؟ يجب أن يتم استدعاؤها مرة واحدة فقط ، لذلك ربما يمكن إضافتها إلى WSGIRequestHandler.__init__
؟ ربما تكون هناك خيارات أفضل ، لكن هذا كل ما يمكنني التفكير فيه الآن.تمكنت من تصحيح المشكلة عن طريق إضافة الكود التالي إلى تطبيق flask الخاص بي
import os import sys if sys.platform.lower() == "win32": os.system('color')
راجع https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python للحصول على التفاصيل.
يبدو أنه يتم تصفية الأقواس المزدوجة في السجلات كما اقترح @ mrx23dot .
شكر. أضف الكود في config.py ، فهو يعمل بالنسبة لي. 😀
التعليق الأكثر فائدة
تمكنت من تصحيح المشكلة عن طريق إضافة الكود التالي إلى تطبيق flask الخاص بي
راجع https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python للحصول على التفاصيل.
يبدو أنه يتم تصفية الأقواس المزدوجة في السجلات كما اقترح @ mrx23dot .