2014-02-18 10 views
1

unit/func 테스트의 테스트 결과를 표시하기 위해 ctx.msg_start()ctx.msg_end()as used in check_cfg을 사용하려고합니다. 그러나 아래의 코드를 통해 항상 추가 "-----"인쇄물을 얻고 실제 텍스트는 두 번 인쇄됩니다 (두 번째 패스는 원본에서 녹색으로 표시됨).waf - strings가 두 번 프린트 됨

---------------------------------------- 테스트 실행 테스트 : 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() 메서드를 어떻게 재정의 할 수 있습니까?

답변

1

.start_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 

대신 WAF Logs.make_logger

, 당신은 NullHandler와 표준 파이썬 로거를 사용할 수 있습니다

한 가지 방법은 로거를 설정하는 것입니다.

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 및 end_msg 구성에 맞게 조정 된 사실