본문 바로가기
CS/Python

Python3 print 함수 출력 글자 색 바꿔서 출력하는 방법

by Warehaus 2022. 8. 5.

 

안녕하세요 warehouse입니다.

 

오늘은 파이썬으로 인터페이스를 만들면서 사용한 간단한 팁을 공유하고자 합니다.

 

 

git

 

우선 일반적인(?) 프로그래머들이 많이 사용하는 git을 먼저 보고 가려고합니다.

 

파이썬 색상 얘기하다가 갑자기 왠 git? 하시겠죠?

우리는 git 명령어를 사용하면서 이런 유형의 색상 출력을 보게 될텐데요

 

그냥 추가된 파일은 초록색이고, 아닌 것들은 빨강이구나..

그리고 git diff 출력에서도 변경 사항을 빨강 초록으로 표시해 주는구나.. 정도로만 자연스럽게 받아들이고 있을 겁니다.

 

그런데, 저는 솔직히 말하면 .. 이런 색상은 어떻게 출력해 주는지 고민해 본 적이 없습니다.

 

최근 까지만 해도요.

 

 

python print

 

그런데 어쩌다 보니 업무상 출력 색상을 변경해야 하는 상황이 생겼습니다.

이전 정보와 업데이트 된 정보를 비교 해 주기 위한 기능이었는데요,

터미널 색상만큼 비교를 잘 할 수 있는 방법이 없었습니다.

 

자, 이제 출력에 색상을 입혀봅시다.

 

저는 ANSI escape sequence를 활용 할 예정입니다.

 

 

ANSI escape sequence

 

근데 ANSI escape sequence 가 뭘까요?

ANSI는 미국 표준협회입니다.

 

Escape sequence 는 프로그래밍 언어로 표현이 되지 않는 기능 또는 문자를 의미하며,

ANSI escape sequence 는 표준 으로 제정 된 문자인거죠.

 

자세한 사항은 위키를..

 

https://en.wikipedia.org/wiki/ANSI_escape_code

 

ANSI escape code - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Method used for display options on video text terminals ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on

en.wikipedia.org

 

 

간단히 무엇을 이용할 것인지에 대해 알아봤으니 이제 진짜 해 봐야할 시간입니다.

 

 

Colored print

 

우선 TEST라는 문자를 출력 해 봅니다.

print("TEST")

 

실행하면 그냥 .. 터미널 기본 색상대로 출력이 나옵니다.

 

기본 터미널 색상대로 표현됩니다.

 

저는 여기서 ANSI Escape sequence 를 이용해서 색상을 변경해 보려고 합니다.

색상은 아래처럼 표현 가능합니다.

Escape code + 색상코드 + m

 

8진수로 표현 된 Escape 코드를 우선 입력하고 원하는 색상 코드와 m 을 입력하면 색이 바뀌게 됩니다.

 

음.. 설명이 길어지니 코드로 보는게 빠를 것 같네요

 

저는 Bright red color code 인 91번으로 출력 색상을 바꿔보려고 합니다.

 

print("\033[91m"+ "TEST" )

 

아래처럼 색상이 바뀌는 것을 볼 수 있습니다.

 

 

그런데,

 

터미널 문자 색상이 다 빨강색으로 변해버렸습니다.

 

그래서 우리는 색상을 리셋 해 줘야 합니다.

위키에도 이런 내용이 있으니 한번 읽어보시기 바랍니다..

 

To reset colors to their defaults, use  ESC[39;49m (not supported on some terminals), or reset all attributes with  ESC[0m

 

다시 색상을 돌려놓기 위해서 저는 reset \033[0m 을 출력해 보려고 합니다. 위에 ESC 가 곧 Escape code이고, \033[ 이 그 코드를 의미합니다.

 

휴, 다시 돌아왔습니다.

 

위에서 보았듯이, ANSI Escape sequence 를 이용해서 색상을 바꾸는 기능을 구현하려면 반드시 Reset 을 해 줘야합니다.

그렇지 않으면 어디선가 연락을 받기 아주 딱 좋습니다.

 

그래서 다음과 같이 코드를 작성하면 조금 이쁘게 코드를 짤 수 있을 것 같습니다.

>>> RED='\033[91m'
>>> RESET='\033[0m'
>>> GREEN='\033[32m'
>>> print(RED + "HELLO RED" + RESET )
HELLO RED
>>> print(GREEN + "HELLO GREEN" + RESET )
HELLO GREEN

 

색상은 아래처럼 기대한 결과를 보여줬습니다.

 

 

웹이나 앱을 구현하시는 분들은 이런 기능을 사용할 일이 아마 없겠죠?

그래도 서버 사이드에서 개발 하시는 분들, 동료들에게 도움을 주는 툴을 개발하시는 분 들께는 상당히 도움이 될만한 팁이라고 생각합니다.

 

저도 앞으로 아주 잘 활용할 수 있을 것 같아서

기록 겸 정리해 보았습니다.

 

 

 

 

참고문서:

https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797