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

  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에서는 사용자 폴더 경로의 형식이 다릅니다)

디스크의 파일이 변경 될 때 내용을 새로 고치는 텍스트 편집기에서 파일을 열면 (예 : Mac의 경우 : TextEdit가 아니라 TextWrangler가 수행함) 로그가 실시간으로 업데이트되는 것을 볼 수 있습니다.

크레딧 :이 코드는 대부분 Nathan Ramella에 의해 liveAPI 컨트롤 스크립트에서 복사되었습니다.