파이썬은 파일을 얼마나 자주 플러시합니까?
- 파이썬은 파일을 얼마나 자주 플러시합니까?
- 파이썬은 얼마나 자주 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
'Programming' 카테고리의 다른 글
여러 테이블에서 개수 (*)를 선택하십시오. (0) | 2020.05.07 |
---|---|
비활성화 된 입력 값은 제출되지 않습니다 (0) | 2020.05.07 |
Visual Studio가 Internet Explorer 대신 기본 브라우저를 엽니 다 (0) | 2020.05.07 |
dyld : 라이브러리가로드되지 않았습니다 : @ rpath / libswift_stdlib_core.dylib (0) | 2020.05.07 |
Ansible Playbook을 단일 컴퓨터로 안전하게 제한합니까? (0) | 2020.05.07 |