Home Python sys.stdout.flush()
Post
Cancel

아래의 help(print)를 보면 print() 함수는 default로 줄바꿈을 해준다.

1
help(print)
1
2
3
4
5
6
7
8
9
10
11
Help on built-in function print in module builtins:  

print(...)  
    print(value, ..., sep=' ', **end='\n'**, file=sys.stdout, flush=False)  
   
    Prints the values to a stream, or to sys.stdout by default.  
    Optional keyword arguments:  
    file:  a file-like object (stream); defaults to the current sys.stdout.  
    sep:   string inserted between values, default a space.  
    `end`:   string appended after the last value, default a newline.  
    flush: whether to forcibly flush the stream.  

그런데 console 창에서 아래의 코드를 실행 하면 1초마다 숫자를 띄워주는 것이 아니라 3초가 다 지난 후에 결과를 한꺼번에 띄워 진행 상황을 알 수가 없다.

기본적으로 python에서는 개행문자'\n'을 받기 전까진 문자열을 출력하지 않기 때문이다.

아래의 코드는 default인 end='\n'을 한 칸의 띄우는 end=' '로 바꿔줬기 때문에 console창에 출력을 하고 있지 않다가 코드 실행이 종료되면 한꺼번에 그 결과를 띄워준다.
(참고로 이는 시스템마다 다른데 예로 같은 코드를 jupyter notebook에서 실행하면 1초마다 출력을 해서 진행 상황을 알 수 있게 해준다.)

1
2
3
4
5
6
import time
import sys

for i in range(3):
    print(i, end=' ')
    time.sleep(1)
1
0 1 2 3

stdout.flush()

stdout.flush()print()함수의 개행 여부와 상관 없이 출력을 해 주는 기능을 한다.

만일 줄바꿈이 없는 문자열을 진행상황을 확인하면서 출력하고 싶을 때는
flush=True로 해줘 버퍼에 있는 문자열을 모두 출력하게 해준다.

1
2
3
4
5
6
import time
import sys

for i in range(3):
    print(i, end=' ', flush=True)
    time.sleep(1)
1
2
3
4
5
6
# 1초 후...
0
# 2초 후...
0 1
# 3초 후...
0 1 2

아래 처럼 print문 다음에 sys.stdout.flush()를 호출해줘도 똑같은 결과가 나온다.

1
2
3
4
5
6
7
import time
import sys

for i in range(3):
    print(i, end=' ')
    sys.stdout.flush()
    time.sleep(1)
1
2
3
4
5
6
# 1초 후...
0
# 2초 후...
0 1
# 3초 후...
0 1 2
This post is licensed under CC BY 4.0 by the author.

Python Sequences

Python - print()로 파일에 출력하기 (sys.stdout - redirection)