2010-12-14 4 views
3

__name__ == '__main__' 일 때만 스크립트로 실행할 때 더 좋은 방법이 있습니까?스크립트로 실행할 때만 인쇄 하시겠습니까?

필자도 일부 스크립트를 가져 와서 사용합니다. 등

뭔가 아래 작동하지만, 못생긴, 별도로 각 스크립트에 정의되어야 할 것이다 것 :

def printif(s): 
    if globals()['__name__'] == '__main__': 
     print (s) 
    return 

내가 파이썬의 로깅 라이브러리의 일부에 잠깐 보았다하지만이 개 가벼운 솔루션을 선호하는 것 .. .

편집 :

# mylog.py 
import sys 
import logging 

log = logging.getLogger() 

#default logging level 
log.setLevel(logging.WARNING) 

log.addHandler(logging.StreamHandler(sys.stdout)) 
:이 같은 일을 결국

그리고 스크립트 :

import log from mylog 

... 
log.info(...) 
log.warning(...) 
... 

if __name__ == '__main__': 
    #override when script is run.. 
    log.setLevel(logger.INFO) 

이 제도는 내가 원하는 정확히 무엇 인 ... 스크립트 로그 수준에 따라 최소한의 코드 중복, 및 프로젝트 전체의 기본 수준을 가지고있다. 로깅 라이브러리를 사용

답변

0

정말하지 헤비급이 : 기본적으로 인쇄 로깅이 모듈을 가져 오는 경우 메시지 :

import logging 

log = logging.getLogger('myscript') 

def dostuff(...): 
    .... 
    log.info('message!') 
    ... 

if __name__ == '__main__': 
    import sys 
    log.setLevel(logging.INFO) 
    log.addHandler(logging.StreamHandler(sys.stdout)) 
    ... 

한 사마귀가 "로 myscripf를 찾지 핸들러 경고가" (스크립트로 실행하는 것이 아니라) 로깅을 설정하지 않고 함수를 호출하십시오. Python 3.2에서 It'll be gone. 파이썬 2.7를 들어, 상단에

log.addHandler(logging.NullHandler()) 

를 추가하여 차단 할 수 있으며, 이전 버전에 대한이 같은 define a NullHandler class해야 할 것 :

class NullHandler(logging.Handler): 
    def emit(self, record): 
     pass  

모든이를 다시 찾고, 내가 말할 : Gerrat의 제안을 따르십시오. 완전 함으로 여기에서 내 것을 떠날거야.

+0

변형을 사용하고 있습니다. 간단한 파이썬 로깅은 가볍습니다 (보일러 - 플레이트, 구문). – user318904

5
run_as_script = False 

def printif(s): 
    if run_as_script: 
     print (s) 
    return 

if __name__ == '__main__': 
    run_as_script = True 
+0

이 단지 별칭 - 보내고 __name__ == __main__, 나는 위의 게시 된 코드와 동일합니다. 스크립트가 아닌 다른 모듈에 정의되어 있고 가져온 경우 예상대로 작동하지 않습니다. – user318904

1

다른 대답에 대한 user318904 님의 의견에 비추어 볼 수있는 대안을 제시 하겠지만 (모든 경우에 해당되는 것은 아니지만 '충분 함'일지도 모름). 별도의 모듈에
:

import sys 

def printif(s): 
    if sys.argv[0] != '': 
     print (s) 
+0

다시, 본질적으로 동일합니다. – user318904

+0

시도해 보셨습니까? – Gerrat

+0

예, 당신이 맞습니다. 나는 그것을 기각하는 데 성급했다. 로깅 패키지를 사용하여 더 많은 기능을 선택 하겠지만 필자는 이것을 유틸리티 함수 ..thanks에 추가 할 것입니다! – user318904

관련 문제