重写的Django check命令中no_color设置不生效问题
问题解决:自定义Django check命令中
no_color设置不生效的问题 问题原因
Django命令的颜色输出配置是在参数解析阶段完成初始化的,而非handle方法执行时。你在handle中修改options['no_color'] = True时,命令的stdout/stderr流对象已经基于初始的参数配置(未设置--no-color时为False)完成了颜色处理器的初始化,后续修改options不会覆盖已生效的颜色设置。
两种可行解决方案
方案1:在参数解析阶段设置默认值
重写add_arguments方法,直接修改no_color参数的默认值,让参数解析阶段就将其设为True,这样后续的颜色配置会直接生效:
from django.core.management.commands import check class Command(check.Command): help = 'My Customized Version of the Original check Command' def add_arguments(self, parser): super().add_arguments(parser) # 设置no_color和deploy的默认值 parser.set_defaults(no_color=True, deploy=True) def handle(self, *args, **options): print('>>> Running customized check') super().handle(*args, **options)
方案2:直接修改输出流的颜色属性
在handle方法中,强制修改命令自身的stdout和stderr对象的no_color属性,覆盖已初始化的颜色配置:
from django.core.management.commands import check class Command(check.Command): help = 'My Customized Version of the Original check Command' def handle(self, *args, **options): print('>>> Running customized check') options['deploy'] = True # 直接修改输出流的颜色设置 self.stdout.no_color = True self.stderr.no_color = True super(Command, self).handle(*args, **options)
两种方案都能解决你的问题,方案1更符合Django命令的参数设计逻辑,方案2则更直接针对颜色输出的底层配置。
内容的提问来源于stack exchange,提问作者nino
相关产品推荐
相关产品推荐

