2011-02-09 9 views
3

파이썬 인터프리터가 파일에 저장되고 화면에 인쇄되도록 강제 종료하는 모든 오류를 기록하는 방법을 찾고 싶습니다. 이 작업을 수행하고자하는 이유는 내가 코드를 작성하는 동안 작성한 오류 유형에 대한 통계를 유지하려는 것이므로 앞으로 내가 일반적으로 범하는 실수를 피할 수있는 방법을 찾아야합니다.파이썬 오류 로깅

저는 서브 프로세스 모듈을 사용하여 파이썬 인터프리터에 대한 래퍼를 작성하여이 작업을 시도했습니다. 기본적으로 파이썬 인터프리터를 실행하고, 출력을 캡처하고, 구문 분석하여 파일에 저장하고, 출력을 인쇄하고, matplotlib를 사용하여 일부 요약 그림을 만듭니다. 그러나 래퍼 스크립트에서 실시간으로 출력되는 데 문제가 있습니다. 예를 들어, 내가 실행 해요 스크립트 인 경우 :

import os 
import time 

for x in range(10): 
    print "testing" 
    time.sleep(10) 

내가 p.communicate와 subprocess.Popen를()() 사용하고, 다음 백초 기다린 랩퍼는 모든 출력을 인쇄 . 래퍼를 가능한 한 보이지 않게하고 싶습니다. 이상적으로는 10 초마다 "테스트"를 인쇄하는 것이 이상적입니다.

누군가 내가이 작업을 수행하는 좋은 방법을 지적 할 수 있다면 크게 감사하겠습니다.

감사합니다.

답변

6

나는 sys.excepthook을 자신의 기능으로 간단하게 대체 할 수 있다고 생각합니다. 당신은 Python documentation에서 그것에 대해 읽을 수 있습니다.

기본적으로 예외가 파이썬 인터프리터를 강제 종료 할 때까지 어떤 일이 발생하는지 사용자 정의 할 수 있습니다. 이처럼 사용 : 당신은 아마도 당신이 얻을 역 추적을 형식화, the traceback module보고 싶을 것이다

import sys 

def my_excepthook(type, value, tb): 
    # you can log the exception to a file here 
    print 'In My Exception Handler' 

    # the following line does the default (prints it to err) 
    sys.__excepthook__(type, value, tb) 

sys.excepthook = my_excepthook 

.