waf - 字符串打印两次

时间:2014-02-18 20:12:25

标签: logging output stdout stderr waf

我尝试使用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()方法?

2 个答案:

答案 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(...)