표준 입출력이란?
- 표준 입력(stdin) 파이썬 함수 : input()
- 표준출력(stdout) 함수 : print()
python의 print(), input() 같은 함수들은 시스템 함수를 활용해서 만들어진 입출력이 혼합된 함수이다.
일종의 모듈(특정 기능들(함수, 변수, 클래스 등)이 구현되어있는 파일을 의미)이라고 볼 수 있고,
print()나 input()이 없었다면 표준입출력을 사용해야한다.
일단 내장함수 print의 정의를 보면 file=sys.stdout이 기본 인자(Arguement)로 전달되는 것을 알 수 있다.
print(*objects, sep=' ', end='\n', file=None, flush=False)(공식문서)
Print objects to the text stream file, separated by sep and followed by end. sep, end, file, and flush, if present, must be given as keyword arguments.
flush 등 인자값에 대한 자세한 설명
갑자기 헷갈리는 Parameter와 Arguement 차이▼
Parameter와 Arguement 차이
Parameter | 매개변수 | 함수와 메서드 입력 변수(Variable) 명 |
Argument | 전달인자, 인자 | 함수와 메서드의 입력 값(Value) |
import sys # sys 모듈을 가져와서 사용하겠다는 의미
print("Python", "Java", file=sys.stdout) # 표준 출력 (defualt)
print("Python", "Java", file=sys.stderr) # 표준 에러
file= 에 sys.stdout에 아래 2개 input을 넣었을 때 결과는 크게 달라지지 않는다.
두가지의 출력의 용도는 다음과 같다.
- sys.stdout (Standard Output, 표준 출력)
- 프로그램 수행 과정에서 몇 시에 어떤 작업을 어떤 식으로 수행하고 있으며 그 결과는 어떠한지 등의 정보를 가지는 로그
- 사용자가 필수적으로 확인해야하는 에러 부분 로깅
- sys.stderr (Standard Error, 표준 에러)
- 에러 발생 시 관련 내용을 출력
- 나머지 디버깅에 필요한 정보는 stderr로 로깅
그래서 stdout / stderr 의 차이가 뭔데?
가장 큰 차이점은 버퍼링이다.
stdout(표준출력)은 줄 단위의 버퍼링(line buffering) 을 하지만 stderr(표준에러)는 버퍼링없이(Null buffering) 바로 출력이 된다.
stdout / stderr 언제 써야하는거지?
정상적인 출력이 오류,경고,디버그 정보와 섞이는 걸 원하지 않는 경우에 stderr를 사용해야한다.
에러 케이스까지 다 표준출력으로 보내버리는 경우 이 문구가 에러인지 아닌지 구분하는 것이 어렵다 .
따라서 에러로그를 따로 남겨야 디버깅 하기 쉽기 때문에 '에러에 대한 print는 stderr로' 보내는 것이 좋다.
단순히 출력을 하는 이유라면 굳이 stderr를 써야할까?
>> 우리는 단순히 어디까지 정상적으로 돌아갔는지 확인하기 위해 msgInfo(0, ) 을 사용했다.
msgType==1이 .. 과연 python파일을 돌리는데 필요한 것일까?..
에러 메시지 대신 내가 설정한 문구가 출력되는 것은 알겠으나, 모든 코드를 봐도 다 stdout으로 설정해놓던데.. 흠..
더 확인해봐야할 것 같다.
def msgInfo( msgType=1, msg="" ) :
nowTime = dt.datetime.today()
pStr = "\t msgInfo>> [%s] : %s\n" % ( nowTime.strftime( '%Y-%m-%d %H:%M' ), msg )
if msgType == 0 : sys.stdout.write(pStr)
elif msgType == 1 : sys.stdout.write(pStr)
참고
'개발 > ETC' 카테고리의 다른 글
[Linux] sed 명령어로 여러개의 파일 문자열 변경하기 (0) | 2024.04.22 |
---|---|
[Python] 디버깅 모듈 pdb (0) | 2023.05.21 |
싱글스레드 리더십과 팀 (0) | 2022.12.28 |
[python] 문자열 _ n-size 나누기 (0) | 2022.03.05 |
[python] zsh: command not found: conda 에러 해결 (0) | 2022.02.06 |