- Arawn's Dev Blog
- Outsider's Dev Story
- Toby's Epril
- Benelog
- NHN 개발자 블로그
- SK 플래닛 기술 블로그
- OLC CENTER
- 소프트웨어 경영/공학 블로그
- 모바일 컨버전스
- KOSR - Korea Operating System …
- 넥스트리 블로그
- 리버스코어 ReverseCore
- SLiPP
- 개발자를 위하여... (Nextree 임병인 수석)
- "트위터 부트스트랩: 디자이너도 놀라워할 매끈하고 직관…
- Learning English - The English…
- real-english.com
- 'DataScience/Deep Learning' 카테…
- Deep Learning Summer School, M…
- Deep Learning Courses
민서네집
python 프로그램 redirect 시 파일 쓰기 지연의 해결책 본문
python 프로그램을 Windows 운영체제의 명령 프롬프트에서 실행하면서 redirect 시켜서 파일에 저장할 때 쓰기가 지연되는 문제가 있다.
성능을 위해서 일부러 그랬을텐데, tail 프로그램으로 로그를 확인하는데는 매우 불편했다.
여기에 대해서 해결책을 몇가지 찾았다.
For every iteration, you must add this.
sys.stdout.flush()A simple solution is to add a -u option for python command to force unbuffered stdin, stdout and stderr.
python -u myscript.py > myscript.log 2>&1You should pass flush=True to the print function:
import time
for i in range(10):
print('bla', flush=True)
time.sleep(5)According to the documentation, by default, print doesn't enforce anything about flushing:
Whether output is buffered is usually determined by file, but if the
flushkeyword argument is true, the stream is forcibly flushed.
And the documentation for sys's strems says:
When interactive, standard streams are line-buffered. Otherwise, they are block-buffered like regular text files. You can override this value with the
-ucommand-line option.
If you are stuck with an ancient version of python you have to call the flush method of the sys.stdout stream:
import sys
import time
for i in range(10):
print('bla')
sys.stdout.flush()
time.sleep(5)명령 프롬프트에서 python -h 해서 옵션을 보면
-u : force the binary I/O layers of stdout and stderr to be unbuffered;
stdin is always buffered; text I/O layer will be line-buffered;
also PYTHONUNBUFFERED=x
라고 나와 있다.
sys.stdout.flush()라고 해서 stdout 은 flush 할 수 있지만, stderr 도 flush 되게 하기 위해선,
python 실행 시 -u 옵션을 주는 것이 좋을것 같다.
C:\python>python -u agent.py --train > agent.log 2>&1
'Python' 카테고리의 다른 글
| Jupyter notebook 테마(theme) 적용하기 (0) | 2019.01.21 |
|---|---|
| Python for Econometrics (0) | 2018.06.13 |
| MIT 6.00 컴퓨터 공학과 프로그래밍(Python) 오픈 코스 (0) | 2016.12.06 |
| [Python] Function Argument (0) | 2016.11.18 |
| jupyter notebook markdown (0) | 2016.10.30 |