[python] sys.stdout.flush () 메소드 사용법

무엇을 sys.stdout.flush()합니까?



답변

파이썬의 표준 출력은 버퍼링됩니다 (터미널에 쓰기 전에 일부 데이터를 “쓰기”하여 표준 출력으로 수집 함을 의미합니다). 호출 sys.stdout.flush()하면 버퍼를 “플러시 (flush)”하도록합니다. 즉, 버퍼가 정상적으로 대기하기 전에 버퍼에있는 모든 것을 터미널에 기록합니다.

다음은 (버퍼되지 않은) I / O에 대한 유용한 정보와 유용한 이유입니다.
http://en.wikipedia.org/wiki/Data_buffer
버퍼링 된 버퍼와 버퍼되지 않은 IO


답변

다음과 같은 간단한 Python 스크립트를 고려하십시오.

import time
import sys

for i in range(5):
    print(i),
    #sys.stdout.flush()
    time.sleep(1)

이것은 하나 개의 숫자 5 초 동안 매 초마다 인쇄하도록 설계하지만, 지금처럼 당신이 그것을 실행하는 경우 (기본 시스템 버퍼링에 따라) 스크립트 완료 될 때까지 출력을 볼 수 있으며, 모두 한 번에 당신은 볼 수있다 0 1 2 3 4인쇄 화면에.

출력이 버퍼링되고 있기 때문에 sys.stdout각 후에 플러시하지 않으면 print출력이 즉시 표시되지 않습니다. sys.stdout.flush()차이점을 보려면 줄 에서 주석을 제거 하십시오.


답변

내 이해에 따라 인쇄 문을 실행할 때마다 출력이 버퍼에 기록됩니다. 버퍼가 플러시되면 화면에 출력이 나타납니다. 기본적으로 프로그램이 종료되면 버퍼가 플러시됩니다. 그러나 프로그램에서 “sys.stdout.flush ()”문을 사용하여 버퍼를 수동으로 플러시 할 수도 있습니다. 아래 코드에서 i 값이 5에 도달하면 버퍼가 플러시됩니다.

아래 코드를 실행하여 이해할 수 있습니다.

chiru@online:~$ cat flush.py
import time
import sys

for i in range(10):
    print i
    if i == 5:
        print "Flushing buffer"
        sys.stdout.flush()
    time.sleep(1)

for i in range(10):
    print i,
    if i == 5:
        print "Flushing buffer"
        sys.stdout.flush()
chiru@online:~$ python flush.py
0 1 2 3 4 5 Flushing buffer
6 7 8 9 0 1 2 3 4 5 Flushing buffer
6 7 8 9


답변

import sys
for x in range(10000):
    print "HAPPY >> %s <<\r" % str(x),
    sys.stdout.flush()


답변

내 이해에 따라 sys.stdout.flush ()는 해당 지점까지 버퍼링 된 모든 데이터를 파일 객체로 푸시합니다. stdout을 사용하는 동안 데이터는 터미널에 기록되기 전에 버퍼 메모리에 저장됩니다 (일시적 또는 메모리가 채워질 때까지). flush ()를 사용하면 버퍼가 비어 있기 전에도 버퍼를 비우고 터미널에 쓰게됩니다.


답변