답변:
파이썬의 표준 출력은 버퍼링됩니다 (터미널에 쓰기 전에 일부 데이터를 "쓰기"하여 표준 출력으로 수집 함을 의미합니다). 호출 sys.stdout.flush()
하면 버퍼를 "플러시 (flush)"하도록합니다. 즉, 버퍼가 정상적으로 대기하기 전에 버퍼에있는 모든 것을 터미널에 기록합니다.
다음은 (버퍼되지 않은) I / O에 대한 유용한 정보와 유용한 이유입니다.
http://en.wikipedia.org/wiki/Data_buffer
버퍼링 된 버퍼와 버퍼되지 않은 IO
sys.stdout.write("%d" % i)
로 바꾸면 sys.stdout.flush()
스크립트가 실행될 때 버퍼가 표시되도록 호출 주석을 해제해야합니다 .
다음과 같은 간단한 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
print i
출력을 얻기 위해 쉼표가없는 경우