복붙노트

[PYTHON] sys.stdout.flush () 메서드 사용

PYTHON

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

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

해결법

  1. ==============================

    1.파이썬의 표준 출력은 버퍼링됩니다 (즉, 터미널에 쓰기 전에 표준 출력에 "기록 된"데이터 중 일부를 수집합니다). sys.stdout.flush ()를 호출하면 버퍼가 "플러시"됩니다. 즉, 일반적으로 버퍼를 기다리기 전에 버퍼에있는 모든 내용을 터미널에 쓰게됩니다.

    파이썬의 표준 출력은 버퍼링됩니다 (즉, 터미널에 쓰기 전에 표준 출력에 "기록 된"데이터 중 일부를 수집합니다). sys.stdout.flush ()를 호출하면 버퍼가 "플러시"됩니다. 즉, 일반적으로 버퍼를 기다리기 전에 버퍼에있는 모든 내용을 터미널에 쓰게됩니다.

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

  2. ==============================

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

    다음과 같은 간단한 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을 플러시하지 않으면 출력이 즉시 표시되지 않습니다. 차이점을 확인하려면 sys.stdout.flush () 줄에서 주석을 제거하십시오.

  3. ==============================

    3.내 이해에 따라, 우리가 언제까지 print 문을 출력하면 버퍼에 기록 될 것이다. 버퍼가 플러시 (지워짐)되면 화면에 출력이 표시됩니다. 기본적으로 프로그램 종료시 버퍼가 비워집니다. 그러나 프로그램에서 "sys.stdout.flush ()"문을 사용하여 버퍼를 수동으로 플러시 할 수도 있습니다. 아래 코드에서 i 값이 5에 도달하면 버퍼가 플러시됩니다.

    내 이해에 따라, 우리가 언제까지 print 문을 출력하면 버퍼에 기록 될 것이다. 버퍼가 플러시 (지워짐)되면 화면에 출력이 표시됩니다. 기본적으로 프로그램 종료시 버퍼가 비워집니다. 그러나 프로그램에서 "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 @ : ~ $

    *****산출*****

    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
    

    온라인 chiru @ : ~ $

  4. ==============================

    4.필자의 이해대로 sys.stdout.flush ()는 그 시점까지 버퍼링 된 모든 데이터를 파일 객체로 푸시합니다. stdout을 사용하는 동안 데이터는 터미널에 기록되기 전에 버퍼 메모리에 저장됩니다 (일부 시간 또는 메모리가 채워질 때까지). flush ()를 사용하면 버퍼에 빈 공간이 있기 전에 버퍼를 비우고 터미널에 씁니다.

    필자의 이해대로 sys.stdout.flush ()는 그 시점까지 버퍼링 된 모든 데이터를 파일 객체로 푸시합니다. stdout을 사용하는 동안 데이터는 터미널에 기록되기 전에 버퍼 메모리에 저장됩니다 (일부 시간 또는 메모리가 채워질 때까지). flush ()를 사용하면 버퍼에 빈 공간이 있기 전에 버퍼를 비우고 터미널에 씁니다.

  5. ==============================

    5.

    import sys
    for x in range(10000):
        print "HAPPY >> %s <<\r" % str(x),
        sys.stdout.flush()
    
  6. from https://stackoverflow.com/questions/10019456/usage-of-sys-stdout-flush-method by cc-by-sa and MIT license