출력 버퍼링를 해제하고 싶습니다

sys.stdout이 디폴트로 buffering을 하고 있어 멀티 쓰레딩할때 이상하게 돌아가는데 버퍼링을 해제시키려면 어떻게 해야 하나요?

1답변

  • 좋아요

    1

    싫어요
    채택취소하기

    1. 커맨드 라인에서 설정하는 방법

    파이썬 스크립트를 실행할 때 python -u <file> 과 같이 실행


    2. 환경변수로 설정하는 방법

    환경 변수 PYTHONUNBUFFERED를 설정하면 버퍼링 되는 걸 막을 수 있습니다.

    import os
    os.environ('PYTHONUNBUFFERED') = '1'
    

    3. stdout 할 때 마다 flush 해주는 객체 생성

    write 할 때 마다 flush 해주는 클래스를 만들어서 sys.stdout를 이 객체로 대체하는 방법입니다.

    class Unbuffered(object):
       def __init__(self, stream):
           self.stream = stream
       def write(self, data):
           self.stream.write(data)
           self.stream.flush()
       def __getattr__(self, attr):
           return getattr(self.stream, attr)
    
    import sys
    sys.stdout = Unbuffered(sys.stdout)
    print 'Hello'
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.