我尝试使用ctx.msg_start()
和ctx.msg_end()
as used in check_cfg来显示单元/功能测试的测试结果。但是使用下面的代码,我总是得到额外的“-----”打印,并且实际文本被打印两次(第二遍在原件中显示为绿色)。
----------------------------------------运行testRunning测试:PASSEDPASSED
class voodoo(Task.Task):
run(self):
self.generator.bld.start_msg("Running test")
proc = Utils.subprocess.Popen(self.gt_exec,\
cwd=cwd,\
env=fu,\
stderr=Utils.subprocess.PIPE,\
stdout=Utils.subprocess.PIPE)
(out, err) = proc.communicate()
if proc.returncode==0:
self.generator.bld.end_msg ("PASSED\n", 'GREEN');
else:
self.generator.bld.end_msg ("FAIL", 'YELLOW');
来源显示output is somewhat expected 但为什么/如何在check_cfg
中有效?如何覆盖构建上下文的.to_log()
方法?
答案 0 :(得分:1)
实际上,start_msg和end_msg是为配置而定制的。如果在构建中使用它们,则会获得stdout版本和转到config.log文件的部分。
一种方法是设置记录器:
bld = self.generator.bld
bld.logger = Logs.make_logger(path_to_some_log_file, 'mylogger')
bld.start_msg("Running test")
# do something
bld.end_msg("Test ok")
bld.logger = None
您可以使用带有NullHandler的标准python记录器代替WAF Logs.make_logger。
答案 1 :(得分:0)
快速修复 - 不确定这是否是疯狂......
#overwrite the default logger to prevent duplicate logging
def to_log_overwrite(x):
pass
self.generator.bld.to_log = to_log_overwrite
之前.start_msg(...)