sourcecode

sys.stdout 사용방법flush() 메서드

copyscript 2022. 9. 18. 10:03
반응형

sys.stdout 사용방법flush() 메서드

무엇인가.sys.stdout.flush()할 수 있을까?

Python의 표준 출력은 버퍼링됩니다(단말기에 쓰기 전에 표준 출력하기 위해 "쓰기"된 데이터 중 일부를 수집합니다).부르기sys.stdout.flush()는 버퍼를 강제적으로 "비활성화"시킵니다.이는 버퍼 내의 모든 것을 단말기에 쓰는 것을 의미합니다.일반적으로 버퍼에 기입하기 전에 대기하는 경우에도 마찬가지입니다.

다음은 버퍼링되지 않은 I/O에 대한 몇 가지 유용한 정보와 유용한 이유를 소개합니다.
http://en.wikipedia.org/wiki/Data_buffer
버퍼링된 IO와 버퍼링되지 않은 IO

다음과 같은 간단한 Python 스크립트를 생각해 보십시오.

import time
import sys

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

이것은 5초간 1초마다 1개의 번호를 인쇄하도록 설계되어 있습니다만, (디폴트의 시스템버퍼에 따라 다름) 그대로 실행하면 스크립트가 완료될 때까지 출력이 표시되지 않을 수 있습니다.그 후 한 번에 표시됩니다.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()를 사용하면 버퍼에 빈 영역이 있기 전에 버퍼를 비우고 단말기에 쓸 수 있습니다.

이 두 가지 차이점을 알 수 있습니다.

import sys

for i in range(1,10 ):
    sys.stdout.write(str(i))
    sys.stdout.flush()

for i in range(1,10 ):
    print i

첫 번째 경우 플래시에 의해 각 문자가 기입된 후 1개씩 출력된다.두 번째 경우, Python은 Python이 쓸 만한 가치가 있다고 생각할 때까지 Python에 의해 버퍼링된 후 일괄적으로 작성한다.

를 들어 'A'를 붙는다.time.sleep(0.2)루프가 있으면 이게 더 명확해져요

언급URL : https://stackoverflow.com/questions/10019456/usage-of-sys-stdout-flush-method

반응형