모든 인쇄 문을 터미널과 파일로 모두 출력해야합니다. 나는 내가 파일 및 인쇄는 터미널의 정상 작동으로 돌아가 작성을 중지하고자 할 때stdout을 원본으로 복원 할 수 없습니다 (터미널에만 해당).
내 문제는, 그래서 내가
의class Tee(object):
def __init__(self, name):
self.file = open(name, "a")
self.stdout = sys.stdout
sys.stdout = self
def __del__(self):
sys.stdout = self.stdout
self.file.close()
def write(self, data):
self.file.write(data)
self.stdout.write(data)
sys.stdout = Tee("log.txt")
이 위대한 작품을 사용 this stackoverflow question 에서 해결책을 찾았습니다
del (sys.stdout)을 사용하여 del 메서드를 호출했습니다.
는 난에 마지막 라인을 변경하려고 :
multiple_print = Tee("log.txt")
sys.stdout = multiple_print
및보다 사용 델 (multiple_print)와 상관없이 내가 뭘하려
실패하지, 여전히 단자와 파일에 기록 인쇄의 추가 사용 양자 모두.아이디어가 있으십니까?
oldstdout = sys.stdout
을하고 이후 sys.stdout
에 재 할당 :
감사합니다. 나는 복잡한 해결책을 만들고 작동을 잊어 버리려고 노력한다. 그러나 __del__이 작동하지 않는 이유를 알고 있습니까? (__init__ 부분에 저장된 sys.stdout = self.stdout을 포함합니다.) –
[sys .__ stdout__] (http://docs.python.org/library/sys.html#sys.__stdout__) 이전 참조를 직접 저장하는 대신 –
귀하의 후속 조치를 해결하기 위해 제 답변을 업데이트했습니다! 그리고 Frederic Hamidi는 요점이 있습니다! 나는'sys .__ stdout__'에 대해 몰랐다! –