Programming

파이썬은 파일을 얼마나 자주 플러시합니까?

procodes 2020. 5. 7. 21:28
반응형

파이썬은 파일을 얼마나 자주 플러시합니까?


  1. 파이썬은 파일을 얼마나 자주 플러시합니까?
  2. 파이썬은 얼마나 자주 stdout으로 플러시합니까?

확실하지 않습니다 (1).

(2)에 관해서는, 매 줄마다 파이썬이 stdout으로 플러시한다고 생각합니다. 그러나 stdout에 파일이되도록 과부하하면 자주 플러시됩니까?


파일 작업의 경우 Python은 달리 구성하지 않는 한 운영 체제의 기본 버퍼링을 사용합니다. 버퍼 크기, 버퍼링되지 않은 또는 라인 버퍼링을 지정할 수 있습니다.

예를 들어, open 함수는 버퍼 크기 인수를 사용합니다.

http://docs.python.org/library/functions.html#open

"선택적 버퍼링 인수는 파일의 원하는 버퍼 크기를 지정합니다."

  • 0은 버퍼되지 않음을 의미하고
  • 1은 라인 버퍼링을 의미하고
  • 다른 양수 값은 해당 크기의 버퍼를 사용한다는 것을 의미합니다.
  • 네거티브 버퍼링은 시스템 기본값을 사용하는 것을 의미합니다. 일반적으로 tty 장치의 경우 라인 버퍼링되고 다른 파일의 경우 완전히 버퍼링됩니다.
  • 생략하면 시스템 기본값이 사용됩니다.

암호:

bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)

flush()메소드를 사용하여 프로그래밍 방식으로 버퍼를 파일로 강제 플러시 할 수도 있습니다 .

with open('out.log', 'w+') as f:
    f.write('output is ')
    # some work
    s = 'OK.'
    f.write(s)
    f.write('\n')
    f.flush()
    # some other work
    f.write('done\n')
    f.flush()

출력 파일에 꼬리를 달 때 유용하다는 것을 알았습니다 tail -f.


이것이 파이썬에도 적용되는지는 모르겠지만 실행중인 운영 체제에 달려 있다고 생각합니다.

예를 들어 Linux에서 터미널로의 출력은 개행으로 버퍼를 플러시하는 반면, 파일로 출력하는 경우 버퍼가 가득 찼을 때만 기본적으로 플러시됩니다. 버퍼를 더 적은 시간에 플러시하는 것이 더 효율적이고 출력이 파일의 개행에서 플러시되지 않는 경우 사용자가 알아 차리지 못할 수 있기 때문입니다.

필요한 경우 출력을 자동 플러시 할 수 있습니다.

편집 : 나는 당신이 이런 식으로 파이썬에서 자동 플러시 할 것이라고 생각합니다 ( 여기 부터 )

#0 means there is no buffer, so all output
#will be auto-flushed
fsock = open('out.log', 'w', 0)
sys.stdout = fsock
#do whatever
fsock.close()

io 모듈에서 읽기 전용 DEFAULT_BUFFER_SIZE 속성을 호출하여 기본 버퍼 크기를 확인할 수도 있습니다.

import io
print (io.DEFAULT_BUFFER_SIZE)

여기에 OP를 선택하여 원하는 것을 선택하는 또 다른 접근법이 있습니다.

__init__다른 코드보다 먼저 .py 파일에 아래 코드를 포함 시키면 인쇄 된 메시지 print및 오류가 더 이상 Ableton의 Log.txt에 기록되지 않고 디스크에서 파일을 분리합니다.

import sys

path = "/Users/#username#"

errorLog = open(path + "/stderr.txt", "w", 1)
errorLog.write("---Starting Error Log---\n")
sys.stderr = errorLog
stdoutLog = open(path + "/stdout.txt", "w", 1)
stdoutLog.write("---Starting Standard Out Log---\n")
sys.stdout = stdoutLog

(Mac의 경우 #username#사용자 폴더 이름으로 변경 합니다. Windows에서는 사용자 폴더 경로의 형식이 다릅니다)

When you open the files in a text editor that refreshes its content when the file on disk is changed (example for Mac: TextEdit does not but TextWrangler does), you will see the logs being updated in real-time.

Credits: this code was copied mostly from the liveAPI control surface scripts by Nathan Ramella

참고URL : https://stackoverflow.com/questions/3167494/how-often-does-python-flush-to-a-file

반응형