HOWTO · Python

Python 인쇄 컬러 텍스트

이 기사는 Python에서 컬러 텍스트를 인쇄하는 방법을 보여줍니다.

이 페이지의 내용

이 가이드에서는 Python으로 터미널에 컬러 텍스트를 출력하는 방법을 설명합니다. print()는 텍스트를 출력 스트림에 씁니다. 텍스트에 포함된 ANSI 이스케이프 시퀀스는 이를 지원하는 터미널에 서식 변경을 요청합니다. 터미널은 이 시퀀스를 색상으로 표시할 수 있지만, 로그 파일이나 IDE 창처럼 다른 출력 대상에서는 코드가 문자 그대로 표시될 수 있습니다. 배경색과 기타 터미널 제어 기능은 ANSI 이스케이프 코드와 Python의 색상 가이드를 참고하세요.

터미널 색상 코드는 어떻게 작동하나요?

ANSI 색상 시퀀스는 이스케이프 문자(\033)로 시작하며, 전경색이나 배경색 또는 스타일을 선택하는 숫자 매개변수를 포함합니다. 예를 들어 \033[31m은 전경 텍스트를 빨간색으로 표시하도록 요청하고, \033[0m은 재설정을 요청합니다. 이 제어 문자를 해석하는 것은 터미널이며, Python 자체가 문자열에 색을 입히지는 않습니다. 지원 여부는 터미널과 출력 위치에 따라 달라지므로 모든 콘솔이나 리디렉션된 파일에서 컬러 텍스트가 표시되는 것은 아닙니다.

메시지를 출력한 뒤에도 터미널 서식이 계속 적용될 수 있으므로 재설정이 중요합니다. 각 컬러 구간 끝에서 서식을 재설정하면 같은 터미널 세션에서 뒤이어 출력되는 텍스트에 해당 서식이 이어지는 것을 막을 수 있습니다.

ANSI 이스케이프 코드로 컬러 텍스트 출력하기

시퀀스를 쉽게 재사용하고 수정할 수 있도록 이름이 있는 상수로 정의하세요. 이 자체 완결형 예제는 메시지 세 개를 출력하고 각 메시지 뒤에서 서식을 재설정합니다. 실행 결과를 주장하는 것이 아니라 코드 예제를 제공합니다.

다음 예제를 실행해 보세요. 코드 블록의 메시지 문구는 영어로 유지됩니다.

class Colors:
    GREEN = "\033[92m"
    YELLOW = "\033[93m"
    RED = "\033[91m"
    RESET = "\033[0m"

print(Colors.GREEN + "File Saved Successfully!" + Colors.RESET)
print(Colors.YELLOW + "Warning: Are you sure you want to continue?" + Colors.RESET)
print(Colors.RED + "Unable to delete record." + Colors.RESET)

예제를 수정하려면 색상 상수를 지원되는 다른 ANSI 시퀀스로 바꾸세요. 시퀀스를 문자열에 직접 넣거나 f-string을 사용할 수도 있습니다. 이는 서식 지정 방식의 차이일 뿐, 어떤 터미널이 시퀀스를 해석하는지는 바뀌지 않습니다. 코드는 복사하고 편집할 수 있도록 선택 가능한 형태로 제공됩니다.

Windows에서 Colorama 사용하기

ANSI가 표시되는 방식은 터미널 환경에 따라 달라집니다. Windows에서는 colorama가 ANSI 시퀀스를 출력하는 애플리케이션을 지원되는 콘솔에서 사용할 수 있도록 도와줄 수 있습니다. 다만 실제 동작은 콘솔과 출력 대상에 따라 달라집니다. 스크립트를 실행하는 환경에 python -m pip install colorama 또는 python3 -m pip install colorama 명령으로 패키지를 설치하세요. 이 명령은 Python 문장이 아니라 셸 명령입니다.

다음 완전한 예제는 선택 패키지가 설치되지 않은 환경도 처리합니다. 패키지를 사용할 수 있으면 Colorama를 초기화하고 전경색과 밝은 스타일을 함께 적용합니다. 이 예제는 여기서 실행하지 않았으며, 패키지에 의존하는 분기를 실행하려면 Colorama를 설치해야 합니다. 코드 블록에 표시되는 메시지 문구는 영어로 유지됩니다.

try:
    import colorama
    from colorama import Fore, Style
except ImportError:
    print("Install colorama with: python -m pip install colorama")
else:
    colorama.init()
    print(Fore.BLUE + Style.BRIGHT + "This is the color of the sky" + Style.RESET_ALL)
    print(Fore.GREEN + "This is the color of grass" + Style.RESET_ALL)
    print(Fore.BLUE + Style.DIM + "This is a dimmer version of the sky" + Style.RESET_ALL)
    print(Fore.YELLOW + "This is the color of the sun" + Style.RESET_ALL)

Colorama는 Fore를 통해 전경색 상수를, Style을 통해 텍스트 스타일을 제공합니다. Style.RESET_ALL은 활성화된 ANSI 스타일을 재설정하고, Fore.RESET은 전경색을 재설정합니다. 실제 표시 결과는 터미널에 따라 달라집니다.

색상과 기타 터미널 스타일 재설정하기

일반 ANSI 시퀀스를 사용할 때는 컬러 텍스트 뒤에 \033[0m과 같은 재설정 시퀀스를 추가하세요. 예제에서는 해당 시퀀스에 RESET이라는 이름을 붙여 각 메시지의 서식을 독립적으로 관리합니다. 재설정하지 않으면 다른 시퀀스가 서식을 바꾸거나 터미널이 초기화할 때까지 뒤이은 출력에 선택한 색상이나 스타일이 유지될 수 있습니다.

Colorama를 사용할 때 전체 서식 상태를 기본값으로 되돌리려면 Style.RESET_ALL을 사용하세요. Fore.RESET은 전경색만 재설정하며, 활성화된 다른 모든 스타일을 재설정하지는 않습니다. 변경한 속성에 맞는 재설정 방법을 선택하고 서식을 적용할 텍스트 바로 뒤에 배치하세요. 이렇게 하면 뒤이어 출력되는 메시지와 프롬프트에 의도하지 않은 터미널 스타일이 이어지는 것을 방지할 수 있습니다.