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


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

  • 2016년 01월 21일에 작성됨

조회수 201


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'
  • 2016년 01월 21일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close