그래서 표준 출력을 기록하는 데코레이터를 작성하려고합니다. 인쇄도하고 있습니다. 요점은 출력을 포크하여 콘솔에 표시하고 기록되도록하는 것입니다.로깅이 제대로 작동하지 않습니다.
from time import time
import tempfile
import sys
import datetime
def printUsingTempFile(f):
def wrapper(*a, **ka):
with open('sysLog.txt', 'a') as logFile:
with tempfile.NamedTemporaryFile() as f:
sys.stdout = f
sys.stderr = f
retVal = f(*a, **ka)
f.flush(); f.seek(0); logFile.write('\n'.join(f.readlines()))
f.flush(); f.seek(0); sys.__stdout__.write('\n'.join(f.readlines()))
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
return retVal
return wrapper
if __name__ == '__main__':
@printUsingTempFile
def someFunc(abc='Hello!!!'):
'''
This is the docstring of the someFunc function.
'''
print abc
return 1
someFunc('Print something here')
내가 지금처럼 실행 : 그래서 이것은 내가 지금까지 무엇을 가지고
In [18]: !python utility.py
내가 바보 iPython 창이 닫히고 run
기능을 사용하는 것입니다 실행하면 때문이다.
디렉토리에 'sysLog.txt'
이라는 새 파일이 있는데 비어 있습니다. 그리고 어느 곳에서도 볼 수있는 출력이 없습니다. 오류 또는 아무것도 없습니다. 아무것도 아니야! 여기에 약간의 좌절감을 갖습니다. 이 코드를 :(디버깅하는 방법을 잘하지
편집 :.
def printUsingTempFile1():
with open('sysLog.txt', 'a') as logFile:
with tempfile.NamedTemporaryFile() as f:
sys.stdout = f
sys.stderr = f
print 'This is something ...'
f.flush(); f.seek(0); logFile.write('\n'.join(f.readlines()))
f.flush(); f.seek(0); sys.__stdout__.write('\n'.join(f.readlines()))
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
그리고이 기능 :
내가 코드를 업데이트, 그래서 내가 두 번 추구되지 않았 음을 깨달았다 나는 다음 코드를 시도
파일에 쓰고 다시 읽는 대신에,'write (self, value)'메쏘드가 원래의'stdout'과 로거 모두에 쓰는 곳에'LoggingWriter'를 생성하여 프로세스를 되돌립니다. – Wolph
지금 일하고 있습니다. Sanjay에게 감사드립니다. – ssm
요점은 파일에 쓰고 다시 읽는 것은 자원 낭비입니다;) – Wolph