2012-05-27 4 views
1

모든 print 명령의 기록을 유지하고 각 명령의 문자열을 파일의 새로운 행에 저장하는 기능을 만들고 싶습니다.모든 것을 파일에 기록하십시오.

def log(line): 
    with open('file.txt', "a") as f: 
     f.write('\n' + line) 

이것은 내가 가지고있는 것이지만, 파이썬을 사용하여 말한 것을 할 수있는 방법이 있습니까? 사용자 정의 클래스와 stdout를 교체

답변

2

봅니다 :

import sys 
class LoggedStdout(): 
    def __init__(self, filename = None): 
     self.filename = filename 
    def write(self, text): 
     sys.__stdout__.write(text) 
     if not self.filename is None: 
      self.log(text) 
    def log(self, line): 
     with open(self.filename, "a") as f: 
      f.write('\n' + line) 

sys.stdout = LoggedStdout('file.txt') 

print 'Hello world!' 

이뿐만 아니라 print뿐만 아니라 stdout 뭔가를 인쇄 다른 기능에 영향을 줄 수 있지만, 더 나은 종종있다.

생산 모드 로깅의 경우 표준 IO 스트림에서 집에서 만든 후크가 아닌 logging module과 같은 것을 사용하는 것이 훨씬 좋습니다.

+0

와우, 멋지다! 어떻게 든 나는 당신이 그것을 할 수 있다는 것을 결코 깨닫지 못했습니다. 당신이 옳긴하지만, 표준 모듈을 사용하는 것이 더 낫습니다. – weronika

관련 문제