Python 출력 text의 color 변경 - grruju/uju GitHub Wiki
Text에 색을 주는 것은 사실 Python에 특화된 것은 아닌, ANSI escape code를 사용하는 것
print('\033[95m' + '안녕' + '\033[96m' + '하세요' + '\033[0m')
텍스트 앞에 '\033[' 을 주고, 뒤에 어떤 숫자와 'm' 을 붙인 것을 넣어 색이 변경
\033[ + 숫자 + m
형태로 사용
'\033[' 이 기호는 Escape sequences 중에서 Control Sequence Introduce (CSI) 를 나타내는 코드. Terminal 창에 뭔가 특수한 역할을 하는 명령을 주는 시작 코드라고 이해하면 된다. 숫자가 왜 033 이냐 하면, 033 은 oct 로 ESC 코드를 나타내는 것으로,
'\033[' 은 '\xb1[' 이나 '\u001b[' 로 대체해서 사용해도 동일한 효과를 볼 수 있다.
\033[ = \xb1[ = \u001b[
print('\033[95m' + '1.안녕' + '\033[0m')
print('\x1b[95m' + '2.안녕' + '\x1b[0m')
print('\u001b[95m' + '3.안녕' + '\u001b[0m')
실행결과 모두 95를 사용하였기 때문에 결과값이 동일.
'숫자m'에서 'm'은 가장 뒤에 붙이는 코드로 생각하면 된다. '0m'에서 0은 실제 색 코드가 아닌 색을 원래대로 되돌리는 것으로 보면 된다. 숫자는 ANSI 표준으로 정해진 규칙이 있다.
글자색 뿐만 아니라 배경색도 변경이 된다.
예제코드
print('\033[31m \033[43m' + '글자와 배경 변경' + '\033[0m')
결과
코드를 설명하자면
- '\033[31m' : Text 색을 빨간색 (Red) 로 변경
- '\033[43m' : Text 배경색을 노란색(Yellow)로 변경
- '글자와 배경 변경' : '글자와 배경 변경' 이라는 문자열 출력
- '\033[0m' : Terminal 속성 초기화 (Reset)
0m의 경우 실제 색 변경을 의미하는 것은 아니고, Terminal에 특정 변경을 시도했던 모든 것을 Reset 하는 의미
만약, 색 변경 후 Reset을 해주지 않으면, 이후의 모든 텍스트는 바로 직전 변경했던 색으로 계속 출력 되게 된다.
위의 16가지 ANSI 코드만 사용할 수 있는 것이 아닌 RGB 색상 표현도 가능.
256-color 글자색 변경
\033[38;5;256색상값m
256-color 배경색 변경
\033[48;5;256색상값m
글자색은 '\033[38;5; 다음에 256-color 색상 값을 넣어준 뒤 m 을 붙이면 된다.
배경색은 '\033[38;5; 다음에 256-color 색상 값을 넣어준 뒤 m 을 붙이면 된다.
256-color 색상 값이 필요한데, 색상 값은 아래 링크를 참고하면 된다.
https://jonasjacek.github.io/colors/
예를 들어 DarkOrange 라는 글자색을 표현하고 싶다면 다음과 같이 하면 된다. 위 링크에서 DarkOrange 의 Xterm Number 를 찾은뒤
208번 다크오렌지로 코드를 작성하면
print('\033[38;5;208m' + '다크 오렌지' + '\033[0m')
위와 같이 256-color 중 하나인 DarkOrange 색으로 글자색이 출력되는 것을 확인할 수 있다.
24Bit True color (RGB) 로 글자색 및 배경색을 변경하는 방법은 다음과 같다.
True color 는 많이 사용하고 있는 RGB 값을 사용해서 표현한다.
\033[38;2;r;g;b m
\033[48;2;r;g;b m
글자색 변경은 '\033[38;2; 뒤에 r값; g값; b값 그리고 m 을 넣어주면 됩니다.
배경색 변경은 '\033[48;2; 뒤에 r값; g값; b값 그리고 m 을 넣어주면 됩니다.
예를 들어 Orchid 라는 색은, RGB 값이 215, 95, 215 이며
이 색으로 글자색을 변경한다면
다음과 같이 코드를 작성하면 된다.
print('\033[38;2;215;95;215m' + 'RGB값으로 색 변경' + '\033[0m')
길게 작성했지만,
쉽고 편하게 print 시 글자색이나 배경색 변경을 사용하려면
- 글자색 변경 (rgb) : '\033[38;2;r;g;bm'
- 배경색 변경 (rgb) : '\033[48;2;r;g;bm'
- 초기화 : '\033[0m'
이렇게 3개만 숙지하여도 충분히 색표현이 가능하다.