반응형
Python을 Docker 혹은 백그라운드에서 사용하는 빈도가 높아지면서 -u/PYTHONUNBUFFERED 를 사용하는 일이 많아졌다.
-u/PYTHONUNBUFFERED를 사용하면 Python 출력 내용을 버퍼에 넣지 않고 바로 출력하라는 의미가 된다.
프로세스를 백그라운드로 실행시에는 -u를 많이 사용하고,
Docker와 같이 시스템 자체에 적용하는 PYTHONUNBUFFERED 도 사용할 수 있다.
-u
force the stdout and stderr streams to be unbuffered; this option has no effect on stdin; also PYTHONUNBUFFERED=x
예로 nohup 백그라운드 실행을 해보면 -u 옵션이 없는 경우 nohup.out에 출력내용이 없는 것을 알 수 있다. 즉 현재 버퍼링 중이고 출력은 나중에 되기 때문이다.
~ $ vi file.py
import time
print('hello')
time.sleep(10)
~ $ nohup python3 file.py &
[1] 25631
~ $ appending output to nohup.out
tail -f nohup.out
hello
위 코드를 실행해보면 아래와 같이 hello가 바로 출력이 되지 않는 것을 알 수 있다.
하지만 -u 옵션을 사용하면 바로 출력 된다.
Docker에서는 PYTHONUNBUFFERED를 이용할 수 있다. 1의 의미를 true를 의미한다.
반응형
'Python' 카테고리의 다른 글
Python - Log Decorator 활용 (0) | 2024.03.25 |
---|---|
Python - 왜 f-string을 쓰라는 걸까 "Formatting a regular string which could be a f-string" (0) | 2024.03.25 |
Python - Mocking/단위 테스트(Unit Test) 과 Django 활용 (0) | 2024.03.25 |
Python - Class, self 메모리 할당과 관리 Reference counting (0) | 2024.03.25 |
Python - List 에서 문자열 포함 유무를 확인 (0) | 2024.03.25 |