>백엔드 개발 >파이썬 튜토리얼 >대화형 모드와 데몬 모드 모두에서 Python의 sys.stdout을 로그 파일에 어떻게 복제할 수 있습니까?

대화형 모드와 데몬 모드 모두에서 Python의 sys.stdout을 로그 파일에 어떻게 복제할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-01 12:23:11789검색

How Can I Duplicate Python's sys.stdout to a Log File in Both Interactive and Daemon Modes?

sys.stdout을 로그 파일에 복제

sys.stdout을 로그 파일에 복제하면 시스템 호출을 포함한 모든 출력을 캡처할 수 있습니다. , Python 애플리케이션에서. 단순함에도 불구하고 이 작업은 애플리케이션이 대화형 모드와 데몬 모드 모두에서 작동할 때 독특한 과제를 제기합니다.

대화형 대 데몬 모드

대화형 모드에서는 다음을 원합니다. 화면과 로그 파일 모두 출력을 수신합니다. 그러나 데몬 모드에서는 모든 출력이 로그 파일로 전달되어야 합니다. os.dup2() 함수는 데몬 모드에서 출력을 리디렉션하는 데 적합하지만 시스템 호출을 수정하지 않고 대화형 모드에서 출력을 복제하는 간단한 솔루션을 제공하지 않습니다.

Tee를 사용한 복제

이 문제를 극복하려면 stdout을 로그 파일에 복제하는 방법을 제공하는 Tee 클래스를 사용할 수 있습니다. 예는 다음과 같습니다.

class Tee(object):
    def __init__(self, name, mode):
        self.file = open(name, mode)
        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)
    def flush(self):
        self.file.flush()

이 클래스를 사용하면 로그 파일 이름과 모드를 매개변수로 사용하는 Tee 인스턴스를 생성할 수 있습니다. write() 메소드는 로그 파일과 stdout 모두에 출력을 복제합니다.

구현 예

Tee 클래스를 사용하려면:

with Tee('logfile.txt', 'w') as tee:
    print('Hello world!')
    os.system('ls -la')

이 예에서는 'ls -la'에 대한 시스템 호출을 포함한 모든 출력이 화면과 로그 파일 모두에 기록됩니다. 'logfile.txt'.

이 솔루션은 개별 시스템 호출을 수정할 필요 없이 시스템 호출 출력을 포함한 모든 출력을 효과적으로 기록합니다.

위 내용은 대화형 모드와 데몬 모드 모두에서 Python의 sys.stdout을 로그 파일에 어떻게 복제할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.