2014-09-21 9 views
1

저는 Python을 처음 사용합니다. Vim을 파이썬 모드로 사용하여 코드를 편집하고 테스트 할 때 같은 코드를 두 번 이상 실행하면 로깅 파일이 처음으로 코드가 실행될 때만 업데이트된다는 사실을 알게되었습니다. 예를 들어 아래 나는 새로운 gvim을 세션을 열고 파이썬 모드로이 코드를 실행하면로깅을위한 파이썬 인터프리터를 재설정하십시오.

#!/usr/bin/python2.7 
import os.path 
import logging 

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log") 
logging.basicConfig(filename=filename_logging, filemode='w', 
       level=logging.DEBUG) 
logging.info('Aye') 

, 그때 나는 파일로 "testlogging.log"전화를받을 것 "testlogging.py"라는 코드 조각이다 내용

INFO:root:Aye 

유망! 그러나 로그 파일을 삭제하고 pythong-mode에서 코드를 다시 실행하면 로그 파일이 다시 작성되지 않습니다. 현재이 터미널에서 코드를 실행하는 경우

./testlogging.py 

그런 다음 로그 파일이 다시 생성됩니다.

나는 파이썬 문서로 확인하고 로깅 튜토리얼에서이 라인 ( https://docs.python.org/2.7/howto/logging.html#logging-to-a-file)주의 :

매우 일반적인 상황이 파일에 기록 로깅 이벤트의 즉를, 그래서 그 다음을 살펴 보자. 새로 시작된 Python 인터프리터에서 다음을 시도해보고 위에서 설명한 세션을 계속 진행하지 마십시오. ...

그래서이 파일을 한 번만 업데이트하면이 문제가 발생한다고 생각합니다. 코드를 다시 실행할 때 같은 인터프리터에 파이썬 모드가 남아 있습니다. 그래서 제 질문은 : 어쨌든이 문제를 해결하기 위해, 로깅 모듈을 만지작 거리거나, 인터프리터를 재설정하기 위해 코드에 무엇인가 넣거나, 파이썬 모드로 리셋하도록 지시하는 것인가? 로깅 모듈이 사전에 도움을 ...

감사 작업을 새로 시작 통역을 필요로하는 이유

나는 또한 궁금합니다.

답변

1

로깅 모듈에 여전히 이전 로그 파일이 열려 있고 로그 파일을 계속 열어 (삭제하더라도) 로그 파일이 계속 작성되므로 로그 파일이 다시 작성되지 않습니다. 이 솔루션은 같은 인터프리터에 다시 코드를 실행하기 전에 모든 획득 한 자원을 해제하기 위해 로깅 모듈을 강제하는 것입니다, 즉

# configure logging 
# log a message 
# delete log file 

logging.shutdown() 

# configure logging 
# log a message (log file will be recreated) 

코드의 끝 부분에 logging.shutdown()를 호출 한 다음 그것을 다시 실행할 수 있습니다 같은 인터프리터 내에서 실행되고 예상대로 작동합니다 (모든 실행시 로그 파일 다시 작성).

0

"w"모드로 로그 파일을 열었습니다. "w"는 처음부터 데이터를 쓰는 것을 의미하므로 마지막 실행 로그 만 보았습니다.

이 때문에 로그 파일에 동일한 내용이 표시됩니다.

5 번째 줄부터 7 번째 줄까지 코드를 수정해야합니다.

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log") 
logging.basicConfig(filename=filename_logging, filemode='a', 
      level=logging.DEBUG) 

위의 코드는 추가 모드 인 'a'모드를 사용하므로 로그 파일 끝에 새 로그 데이터가 추가됩니다.

+0

답장을 보내 주셔서 감사합니다. 하지만 내 질문은 파이썬 모드에서 두 번째 동일한 코드를 실행하는 경우 로깅 작동하지 및 로그 파일을 생성하는 것입니다; 내 질문은 내가 로그 파일에 추가하고 싶지 않다.내 두 번째 실행에서 동일한 내용을 볼 것으로 예상했지만 로그 파일이 전혀 존재하지 않습니다! –