파이썬으로 터미널에서 컬러 텍스트를 인쇄하는 방법은 무엇입니까?


2125

파이썬에서 어떻게 컬러 텍스트를 터미널에 출력 할 수 있습니까? 솔리드 블록을 나타내는 최고의 유니 코드 기호는 무엇입니까?


6
더 나은 응답을 얻으려면 몇 가지 추가 정보를 지정해야합니다. multiplatform? 외부 모듈을 사용할 수 있습니까?
sorin

2
IPython은 크로스 플랫폼을 사용합니다. 그들이 무엇을 사용하는지 봅니까?
endolith

이 기호는 좋은 색깔의 블록을 만들 것입니다 : 만 문제는 그것이 어쩌면 당신이 그것을 사용하여 작업을 얻을 수있는, 확장 된 ASCII 때문이다http://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
새미 Bencherif

일부 터미널은 유니 코드 문자를 표시 할 수도 있습니다. 터미널에 해당되는 경우 가능한 문자는 거의 무제한입니다.
ayke

4
이 답변은 상당히 늦었지만 나에게 최고인 것 같습니다 ... 위에서 투표 한 사람들은 Windows에 대한 특수 해킹이 필요하지만이 작품은 효과가 있습니다 : stackoverflow.com/a/3332860/901641
ArtOfWarfare

답변:


1832

이것은 어느 플랫폼에 있는지에 따라 다릅니다. 이를 수행하는 가장 일반적인 방법은 ANSI 이스케이프 시퀀스를 인쇄하는 것입니다. 간단한 예를 들어, 다음은 블렌더 빌드 스크립트 의 파이썬 코드입니다 .

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

이와 같은 코드를 사용하려면 다음과 같이 할 수 있습니다

print(bcolors.WARNING + "Warning: No active frommets remain. Continue?" + bcolors.ENDC)

또는 Python3.6 +를 사용하는 경우 :

print(f"{bcolors.WARNING}Warning: No active frommets remain. Continue?{bcolors.ENDC}")

이것은 OS X, linux 및 windows를 포함한 유닉스에서 작동합니다 ( ANSICON 을 사용 하거나 Windows 10에서 VT100 에뮬레이션 을 활성화 한 경우 ). 색상 설정, 커서 이동 등을위한 ansi 코드가 있습니다.

이것으로 복잡해질 것이라면 (그리고 게임을 작성하는 것처럼 들린다) "저주"모듈을 살펴보아야합니다.이 모듈은 많은 복잡한 부분을 처리합니다. 파이썬 저주 HOWTO는 좋은 소개합니다.

확장 ASCII를 사용하지 않는 경우 (예 : PC가 아닌 경우) 127 미만의 ASCII 문자가 표시되며 '#'또는 '@'이 블록에 가장 적합합니다. 터미널이 IBM 확장 ASCII 문자 세트를 사용하고 있는지 확인할 수 있으면 더 많은 옵션이 있습니다. 문자 176, 177, 178 및 219는 "블록 문자"입니다.

"Dwarf Fortress"와 같은 일부 최신 텍스트 기반 프로그램은 그래픽 모드에서 텍스트 모드를 에뮬레이트하고 클래식 PC 글꼴의 이미지를 사용합니다. Dwarf Fortress Wiki 에서 사용할 수있는 비트 맵 중 일부를 볼 수 있습니다 ( 사용자 제작 타일셋 ).

텍스트 모드 데모 콘테스트 텍스트 모드에서 그래픽 작업을 수행하기위한 더 많은 자원을 가지고있다.

흠 .. 나는이 대답에 약간의 영향을 미쳤다고 생각한다. 하지만 서사적 인 텍스트 기반 어드벤처 게임을 계획하고 있습니다. 컬러 텍스트로 행운을 빕니다!


그러나 내 기본 프롬프트가 검은 색이 아니라고 가정 해보십시오.이 트릭 후에 파이썬을 resotre로 만들 수 있다고 생각하십니까?
Adobe

4
리눅스에서, 당신은 사용 할 수 있습니다 tput, 그래서 같이 더 휴대용 코드를 초래하기 때문이다.
Martin Ueding

3
@Cawas : 실제 사용 사례 disable는 출력을 파일로 파이프 할 때입니다. 같은 도구 cat는 색상을 지원할 수 있지만 일반적으로 파일에 색상 정보를 인쇄하지 않는 것이 좋습니다.
Sebastian Mach

1
@AlexanderSimko, 다음은 Windows 10에서 VT100 지원을 가능하게하는 ctypes 코드 스 니펫 import ctypes; kernel32 = ctypes.WinDLL('kernel32'); hStdOut = kernel32.GetStdHandle(-11); mode = ctypes.c_ulong(); kernel32.GetConsoleMode(hStdOut, ctypes.byref(mode)); mode.value |= 4; kernel32.SetConsoleMode(hStdOut, mode)입니다.
Eryk Sun

1
대답에서 파이썬 예제 코드를 사용하는 사람에게 : 90-97 및 100-107 범위의 색상은 비표준 이며 실제로 터미널에서 색상이 모두 표시되지는 않습니다. 변수 이름. 표준 범위 30-37 및 40-47을 사용하는 것이 좋습니다. 출처 : en.wikipedia.org/wiki/…
balu

805

아무도 파이썬 termcolor 모듈을 언급하지 않은 것에 놀랐습니다 . 사용법은 매우 간단합니다.

from termcolor import colored

print colored('hello', 'red'), colored('world', 'green')

또는 파이썬 3에서 :

print(colored('hello', 'red'), colored('world', 'green'))

그러나 게임 프로그래밍 및 "컬러 블록"에 대해서는 충분히 정교하지 않을 수 있습니다 ...


2
ANSI 코드를 방출하므로 ansi.sys가로드 된 경우 Windows (DOS 콘솔)에서 작동합니까? support.microsoft.com/kb/101875
Phil P

37
2011

12
(컬러 마와 달리) 단위 테스트가없고 2011 년 이후 업데이트되지 않음
Janus Troelsen

5
termcolor.COLORS당신에게 색상의 목록을 제공
akxlr

23
Windows에서 os.system('color')먼저 실행 하면 ANSI 이스케이프 시퀀스가 ​​작동하기 시작합니다.
Szabolcs

717

대답은 Python의 모든 크로스 플랫폼 색상에 대한 Colorama 입니다.

Python 3.6 예제 스크린 샷 : 스크린 샷 예


317
Colorama의 저자로서 @ nbv4를 언급 해 주셔서 감사합니다. Colorama는 파이썬 프로그램이이 페이지의 다른 많은 답변에서 설명 된 것과 동일한 ANSI 코드를 사용하여 모든 플랫폼에서 컬러 터미널 텍스트를 인쇄하도록하는 것을 목표로합니다. Windows에서 Colorama는 이러한 ANSI 문자를 stdout에서 제거하고 컬러 텍스트에 대한 동등한 win32 호출로 변환합니다. 다른 플랫폼에서는 Colorama가 아무것도하지 않습니다. 따라서 ANSI 코드 또는 Termcolor와 같은 모듈을 사용할 수 있으며 Colorama와 함께 모든 플랫폼에서 작동합니다. 어쨌든 그 아이디어입니까?
Jonathan Hartley

2
@Jonathan, 이것은 정말 멋진 도서관입니다! 플랫폼 색상 Python 출력을 교차하는 기능은 정말 훌륭하고 유용합니다. 자체 콘솔을 채색하는 라이브러리 도구를 제공하고 있습니다. 해당 콘솔의 출력을 터미널로 리디렉션하고 출력을 채색 할 수 있습니다. 이제 라이브러리를 하나 위로 올리고 사용자가 색상을 선택할 수 있습니다. 이를 통해 색맹 인 사람들은 실제로 출력물을 올바르게 볼 수 있도록 작동하도록 설정할 수 있습니다. 감사합니다
Demolishun

50
이것은 표준 라이브러리에 있어야합니다 ... 크로스 플랫폼 색상 지원이 중요합니다.
daviewales

5
칼라마는 위대하다! 또한 콜로라도 에 구축 된 ansimarkup도 살펴보고 <b>bold</b>터미널 텍스트에 스타일을 추가 하기 위해 간단한 태그 기반 마크 업 (예 :)을 사용할 수 있습니다
gvalkov

30
colorama.init ()를 호출하지 않으면 작동하지 않습니다. 투표하세요!
Johnth

427

색상 / 스타일을 시작하는 문자열을 인쇄 한 다음 문자열을 인쇄 한 다음 색상 / 스타일 변경을 종료합니다 '\x1b[0m'.

print('\x1b[6;30;42m' + 'Success!' + '\x1b[0m')

녹색 배경의 성공 사례

다음 코드를 사용하여 쉘 텍스트의 형식 옵션 표를 가져옵니다.

def print_format_table():
    """
    prints table of formatted text format options
    """
    for style in range(8):
        for fg in range(30,38):
            s1 = ''
            for bg in range(40,48):
                format = ';'.join([str(style), str(fg), str(bg)])
                s1 += '\x1b[%sm %s \x1b[0m' % (format, format)
            print(s1)
        print('\n')

print_format_table()

밝고 어두운 예 (완료)

여기에 이미지 설명을 입력하십시오

어두운 조명 예 (일부)

출력의 상단


8
이것은 대부분의 쉘과 ipython에서 작동하며 대부분의 응용 프로그램에 충분합니다
dashesy

4
어떤 터미널인지 물어볼 수 있습니까?
FlipTack

4
얼마나 휴대 할 수 있습니까?
Ruggero Turra


203

색상으로 시작하는 문자열과 색상으로 끝나는 문자열을 정의한 다음 앞에 시작 문자열과 끝 문자열을 사용하여 텍스트를 인쇄하십시오.

CRED = '\033[91m'
CEND = '\033[0m'
print(CRED + "Error, does not compute!" + CEND)

이에 다음을 생산 bash에, urxvtZenburn 스타일의 색 구성표 :

출력 색상

실험을 통해 더 많은 색상을 얻을 수 있습니다.

컬러 매트릭스

참고 : \33[5m\33[6m깜박입니다.

이 방법으로 풀 컬러 컬렉션을 만들 수 있습니다.

CEND      = '\33[0m'
CBOLD     = '\33[1m'
CITALIC   = '\33[3m'
CURL      = '\33[4m'
CBLINK    = '\33[5m'
CBLINK2   = '\33[6m'
CSELECTED = '\33[7m'

CBLACK  = '\33[30m'
CRED    = '\33[31m'
CGREEN  = '\33[32m'
CYELLOW = '\33[33m'
CBLUE   = '\33[34m'
CVIOLET = '\33[35m'
CBEIGE  = '\33[36m'
CWHITE  = '\33[37m'

CBLACKBG  = '\33[40m'
CREDBG    = '\33[41m'
CGREENBG  = '\33[42m'
CYELLOWBG = '\33[43m'
CBLUEBG   = '\33[44m'
CVIOLETBG = '\33[45m'
CBEIGEBG  = '\33[46m'
CWHITEBG  = '\33[47m'

CGREY    = '\33[90m'
CRED2    = '\33[91m'
CGREEN2  = '\33[92m'
CYELLOW2 = '\33[93m'
CBLUE2   = '\33[94m'
CVIOLET2 = '\33[95m'
CBEIGE2  = '\33[96m'
CWHITE2  = '\33[97m'

CGREYBG    = '\33[100m'
CREDBG2    = '\33[101m'
CGREENBG2  = '\33[102m'
CYELLOWBG2 = '\33[103m'
CBLUEBG2   = '\33[104m'
CVIOLETBG2 = '\33[105m'
CBEIGEBG2  = '\33[106m'
CWHITEBG2  = '\33[107m'

테스트를 생성하는 코드는 다음과 같습니다.

x = 0
for i in range(24):
  colors = ""
  for j in range(5):
    code = str(x+j)
    colors = colors + "\33[" + code + "m\\33[" + code + "m\033[0m "
  print(colors)
  x=x+5

2
어떻게 txt 깜박임
WiLL_K

2
어떤 쉘 또는 터미널이 깜박입니까?
Zypps987

1
(u) rxvt
qubodup 2018 년

6
깜박이는 텍스트는 정말 잘 작동합니다. 그래도 어떻게 중지합니까? 어떤 이유로 든 연속 된 모든 인쇄가 깜박입니다. 터미널은 파티 시간이라고 생각합니다!
캡틴

3
문자열 끝에서 깜박 \33[0m이거나, 또는 그 CEND이상입니다.
Stiffy2000

94

ANSI 이스케이프 시퀀스에 대해 배우고 싶습니다. 다음은 간단한 예입니다.

CSI="\x1B["
print(CSI+"31;40m" + "Colored Text" + CSI + "0m")

자세한 내용은 http://en.wikipedia.org/wiki/ANSI_escape_code를 참조하십시오 .

블록 문자의 경우 \ u2588과 같은 유니 코드 문자를 사용해보십시오.

print(u"\u2588")

함께 모아서:

print(CSI+"31;40m" + u"\u2588" + CSI + "0m")

3
def d(*v): return '\x1B['+';'.join(map(str, v))+'m'다음 시도print ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
Evgeni Sergeev

여기서 재설정의 의미는 무엇입니까?
MohitC

71

Windows 10에서 ANSI 코드를 사용하는 방법을 찾았으므로 내장되지 않은 모듈없이 텍스트 색상을 변경할 수 있기 때문에 응답합니다.

이 작업을 수행하는 행 os.system("")은 터미널 또는 ANSI 시스템 코드를 인쇄 할 수있는 다른 시스템 호출입니다.

import os

os.system("")

# Group of Different functions for different styles
class style():
    BLACK = '\033[30m'
    RED = '\033[31m'
    GREEN = '\033[32m'
    YELLOW = '\033[33m'
    BLUE = '\033[34m'
    MAGENTA = '\033[35m'
    CYAN = '\033[36m'
    WHITE = '\033[37m'
    UNDERLINE = '\033[4m'
    RESET = '\033[0m'

print(style.YELLOW + "Hello, World!")

참고 :이 옵션은 다른 Windows 옵션과 동일한 옵션을 제공하지만이 방법을 사용하더라도 ANSI 코드를 완전히 지원하지는 않습니다. 모든 텍스트 장식 색상이 작동하는 것은 아니며 모든 '밝은'색상 (코드 90-97 및 100-107)은 일반 색상 (코드 30-37 및 40-47)과 동일하게 표시됩니다.

편집 : 더 짧은 방법을 찾은 @jl에게 감사드립니다.

tl; dr : os.system("")파일 상단 근처에 추가 하십시오.

파이썬 버전 : 3.6.7


2
이것은 작동합니다-color 명령이 Windows 터미널에서 ANSI 코드를 사용할 수 있다는 사실에 놀랐습니다. 이것이 가능하다는 것을 알지 못하고 몇 년 동안갔습니다. 명령 자체는 이것이 어떤 단서도주지 않습니다.
스튜어트 Axon

1
가장 간단하고 완벽하게 작동합니다. 감사.
Ari

3
분명히 이것은 Windows 10에서만 작동합니다.
Anaksunaman

2
Windows 7 / 8.1에서는 작동하지 않습니다.
Nikos

2
귀하의 답변에 감사드립니다, @SimpleBinary! 귀하의 답변을 가지고 놀면서, 당신은 if sys.platform.lower() == "win32": os.system('color')단순히을 그냥 바꾸면 더 단순화 할 수 있음을 발견했습니다 os.system(''). 조건이 필요하지 않으며 코드는 Windows 10과 Linux에서 모두 테스트됩니다 (테스트 할 때). 보다시피, 시스템 호출을하지 않아도됩니다 color. 통화에 dir, cd, abcdef, 그냥 빈 문자열 잘 동작 (비어 있지 않은 문자열은 가능성이 당신이보고 싶어하지 않는 출력을 인쇄 할 수 있지만).
JL

60

내가 가장 좋아하는 방법은 Blessings 라이브러리 (전체 공개 : 내가 쓴 것)입니다. 예를 들면 다음과 같습니다.

from blessings import Terminal

t = Terminal()
print t.red('This is red.')
print t.bold_bright_red_on_black('Bright red on black')

컬러 벽돌을 인쇄하려면 가장 안정적인 방법은 배경색으로 공간을 인쇄하는 것입니다. 나는에서 진행 표시 줄 그릴이 기술을 사용하여 코 진보를 :

print t.on_green(' ')

특정 위치에서도 인쇄 할 수 있습니다.

with t.location(0, 5):
    print t.on_yellow(' ')

게임 도중 다른 터미널 기능을 사용해야하는 경우에도 그렇게 할 수 있습니다. 파이썬의 표준 문자열 형식을 사용하여 읽을 수 있도록 유지할 수 있습니다.

print '{t.clear_eol}You just cleared a {t.bold}whole{t.normal} line!'.format(t=t)

축복에 대한 좋은 점은 (압도적으로 일반적인) ANSI 색상뿐만 아니라 모든 종류의 터미널에서 작동하는 것이 최선이라는 것입니다. 또한 코드에서 읽을 수없는 이스케이프 시퀀스를 간결하게 사용하면서 간결하게 유지합니다. 즐기세요!


65
매개 변수가 아닌 함수 이름으로 색상을 사용하는 것은 의심스러운 사례입니다.
LtWorf

1
@LtWorf : getattr필요한 경우 쉽게 매개 변수로 만들 수 있습니다 . 또는 형식 문자열을 대신 동적으로 작성하십시오.
jfs

8
@progo 당신이 그것을 할 수 있다는 것이 당신이 그것을해야한다는 것을 의미하지는 않습니다. 색상이 전달할 수있는 매개 변수 인 경우 더 일반적입니다.
LtWorf

2
당신 can just pass은 파이썬 함수입니다.
MaxNoe

2
축복 가져 오기는 창에서 작동하지 않으므로 스크립트를 크로스 플랫폼으로 사용해야하는 경우에는 사용하지 마십시오.
Adversus

58

sty 는 colorama와 유사하지만 덜 장황하고 8 비트24 비트 (rgb) 색상을 지원하며, 자신의 스타일을 등록하고, 뮤팅을 지원하며, 실제로 유연하고 문서화가 잘되어 있습니다.

예 :

from sty import fg, bg, ef, rs

foo = fg.red + 'This is red text!' + fg.rs
bar = bg.blue + 'This has a blue background!' + bg.rs
baz = ef.italic + 'This is italic text' + rs.italic
qux = fg(201) + 'This is pink text using 8bit colors' + fg.rs
qui = fg(255, 10, 10) + 'This is red text using 24bit colors.' + fg.rs

# Add custom colors:

from sty import Style, RgbFg

fg.orange = Style(RgbFg(255, 150, 50))

buf = fg.orange + 'Yay, Im orange.' + fg.rs

print(foo, bar, baz, qux, qui, buf, sep='\n')

인쇄물:

여기에 이미지 설명을 입력하십시오

데모: 여기에 이미지 설명을 입력하십시오


7
칼라마와 비교해 보면 매우 유용합니다. 라이브러리를 선호하지만 상자에서 더 짧은 api 때문에 더 인기가 있다면 더 좋을 것입니다. 감사!
빅터 가브로

나는 sty를 좋아하고 sty로 문자열을 포맷하려고하는데 한 가지 문제는 여러 색상을 인쇄 할 때 기본 색상 대신 이전 색상으로 재설정 할 수 있다는 것입니다.
intijk 2016 년

@VictorGavro 좋은 생각입니다! 설명서와 비교할 수 있습니다.
Rotareti

@intijk 귀하의 질문이 댓글 섹션에 맞지 않습니다. 이런 종류의 질문에 대해서는 새로운 SO 질문을 작성하거나 github 이슈 트래커를 사용하십시오.
Rotareti

53

for 루프를 사용하여 모든 색상으로 클래스를 생성하여 모든 색상 조합을 최대 100까지 반복 한 다음 파이썬 색상으로 클래스를 작성했습니다. GPLv2를 그대로 복사하여 붙여 넣기 :

class colors:
    '''Colors class:
    reset all colors with colors.reset
    two subclasses fg for foreground and bg for background.
    use as colors.subclass.colorname.
    i.e. colors.fg.red or colors.bg.green
    also, the generic bold, disable, underline, reverse, strikethrough,
    and invisible work with the main class
    i.e. colors.bold
    '''
    reset='\033[0m'
    bold='\033[01m'
    disable='\033[02m'
    underline='\033[04m'
    reverse='\033[07m'
    strikethrough='\033[09m'
    invisible='\033[08m'
    class fg:
        black='\033[30m'
        red='\033[31m'
        green='\033[32m'
        orange='\033[33m'
        blue='\033[34m'
        purple='\033[35m'
        cyan='\033[36m'
        lightgrey='\033[37m'
        darkgrey='\033[90m'
        lightred='\033[91m'
        lightgreen='\033[92m'
        yellow='\033[93m'
        lightblue='\033[94m'
        pink='\033[95m'
        lightcyan='\033[96m'
    class bg:
        black='\033[40m'
        red='\033[41m'
        green='\033[42m'
        orange='\033[43m'
        blue='\033[44m'
        purple='\033[45m'
        cyan='\033[46m'
        lightgrey='\033[47m'

44

이 간단한 코드를 사용해보십시오

def prRed(prt): print("\033[91m {}\033[00m" .format(prt))
def prGreen(prt): print("\033[92m {}\033[00m" .format(prt))
def prYellow(prt): print("\033[93m {}\033[00m" .format(prt))
def prLightPurple(prt): print("\033[94m {}\033[00m" .format(prt))
def prPurple(prt): print("\033[95m {}\033[00m" .format(prt))
def prCyan(prt): print("\033[96m {}\033[00m" .format(prt))
def prLightGray(prt): print("\033[97m {}\033[00m" .format(prt))
def prBlack(prt): print("\033[98m {}\033[00m" .format(prt))

prGreen("Hello world")

19
제안 : 다른 문자열과 함께 사용할 수 있도록 컬러 문자열을 직접 인쇄하는 대신 해당 문자열을 반환하는 람다를 정의하십시오.
gustafbstrom

34

Windows에서는 'win32console'모듈 (일부 Python 배포판에서 사용 가능) 또는 모듈 'ctypes'(Python 2.5 이상)를 사용하여 Win32 API에 액세스 할 수 있습니다.

두 가지 방법을 모두 지원하는 완전한 코드를 보려면 Testoob컬러 콘솔보고 코드 를 참조하십시오 .

ctypes 예 :

import ctypes

# Constants from the Windows API
STD_OUTPUT_HANDLE = -11
FOREGROUND_RED    = 0x0004 # text color contains red.

def get_csbi_attributes(handle):
    # Based on IPython's winconsole.py, written by Alexander Belchenko
    import struct
    csbi = ctypes.create_string_buffer(22)
    res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi)
    assert res

    (bufx, bufy, curx, cury, wattr,
    left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
    return wattr


handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
reset = get_csbi_attributes(handle)

ctypes.windll.kernel32.SetConsoleTextAttribute(handle, FOREGROUND_RED)
print "Cherry on top"
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, reset)

2
솔직히 이것은 Windows에서 작동하는 유일한 솔루션입니다. 다른 모든 답변은 서로의 사본입니다.
Danilo

FWIW의 경우 Windows에서 ANSI 시퀀스를 지원하는 ConEmu를 사용하면 고통이 덜할 수 있습니다 (기본 터미널에 비해 여러 가지 장점이 있음). 그래도 네이티브 솔루션을 사용하는 것이 좋습니다.
Endre Both

나는 Danilo와 함께 있습니다.
Muhammad Ali

24

@joeld의 답변을 기반으로 어리석은 간단한

class PrintInColor:
    RED = '\033[91m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    LIGHT_PURPLE = '\033[94m'
    PURPLE = '\033[95m'
    END = '\033[0m'

    @classmethod
    def red(cls, s, **kwargs):
        print(cls.RED + s + cls.END, **kwargs)

    @classmethod
    def green(cls, s, **kwargs):
        print(cls.GREEN + s + cls.END, **kwargs)

    @classmethod
    def yellow(cls, s, **kwargs):
        print(cls.YELLOW + s + cls.END, **kwargs)

    @classmethod
    def lightPurple(cls, s, **kwargs):
        print(cls.LIGHT_PURPLE + s + cls.END, **kwargs)

    @classmethod
    def purple(cls, s, **kwargs):
        print(cls.PURPLE + s + cls.END, **kwargs)

그런 다음

PrintInColor.red('hello', end=' ')
PrintInColor.green('world')

2
하나 이상의 위치 인수 또는 문자열 유형 이외의 항목을 전달하면 충돌이 발생합니다
Romain Vincent

@RomainVincent 그리고이 있으며, 문자열 TY- 대기 이외의 하나 개 이상의 위치 인수 또는 아무것도를 통과하지 못한 print-replacements은 ? 이의 제기 철회.
wizzwizz4

1
@ wizzwizz4이 의견의 의미가 무엇인지 잘 모르겠습니다. 어쨌든 요점을 모르겠습니다. 클래스를 제안하려고한다면, 인쇄처럼 간단한 메소드를 대체하기 위해, 쉽게 깨뜨리는 것을 피할 수도 있습니다. 그냥 내 의견.
Romain Vincent

1
@RomainVincent 나는 당신의 반대가 잘못되었다고 말하려고했지만, 기능을 다재다능하게 대체하기 위해서는 기능 print을 올바르게 복제해야합니다.
wizzwizz4

1
@RomainVincent 구현합니다 무한 인수를 사용합니다 : <코드> def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs)</ 코드>
Emilien 바우 뎃

23

@joeld 답변을 코드의 어느 곳에서나 사용할 수있는 전역 함수가있는 모듈로 래핑했습니다.

파일 : log.py

HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = "\033[1m"

def disable():
    HEADER = ''
    OKBLUE = ''
    OKGREEN = ''
    WARNING = ''
    FAIL = ''
    ENDC = ''

def infog( msg):
    print OKGREEN + msg + ENDC

def info( msg):
    print OKBLUE + msg + ENDC

def warn( msg):
    print WARNING + msg + ENDC

def err( msg):
    print FAIL + msg + ENDC

다음과 같이 사용하십시오.

 import log
    log.info("Hello World")
    log.err("System Error")

22

Windows의 경우 win32api를 사용하지 않으면 색상으로 콘솔에 인쇄 할 수 없습니다.

Linux의 경우 다음과 같이 이스케이프 시퀀스를 사용하여 print를 사용하는 것만 큼 간단합니다.

그림 물감

문자를 상자처럼 인쇄하려면 실제로 콘솔 창에 사용하는 글꼴에 따라 다릅니다. 파운드 기호는 잘 작동하지만 글꼴에 따라 다릅니다.

#

21
# Pure Python 3.x demo, 256 colors
# Works with bash under Linux and MacOS

fg = lambda text, color: "\33[38;5;" + str(color) + "m" + text + "\33[0m"
bg = lambda text, color: "\33[48;5;" + str(color) + "m" + text + "\33[0m"

def print_six(row, format, end="\n"):
    for col in range(6):
        color = row*6 + col - 2
        if color>=0:
            text = "{:3d}".format(color)
            print (format(text,color), end=" ")
        else:
            print(end="    ")   # four spaces
    print(end=end)

for row in range(0, 43):
    print_six(row, fg, " ")
    print_six(row, bg)

# Simple usage: print(fg("text", 160))

전경과 배경이 바뀌는 텍스트, 색상 0..141 전경과 배경이 바뀌는 텍스트, 색상 142..255


20

나는 이것을 끝내고 그것이 가장 깨끗하다고 ​​느꼈다.

formatters = {             
    'RED': '\033[91m',     
    'GREEN': '\033[92m',   
    'END': '\033[0m',      
}

print 'Master is currently {RED}red{END}!'.format(**formatters)
print 'Help make master {GREEN}green{END} again!'.format(**formatters)

이것은 타사 패키지없이 수행하는 데 정말 좋습니다.
Jamie Counsell

20

https://pypi.python.org/pypi/lazyme 사용하여 @joeld 답변을 기반으로 pip install -U lazyme:

from lazyme.string import color_print
>>> color_print('abc')
abc
>>> color_print('abc', color='pink')
abc
>>> color_print('abc', color='red')
abc
>>> color_print('abc', color='yellow')
abc
>>> color_print('abc', color='green')
abc
>>> color_print('abc', color='blue', underline=True)
abc
>>> color_print('abc', color='blue', underline=True, bold=True)
abc
>>> color_print('abc', color='pink', underline=True, bold=True)
abc

스크린 샷 :

여기에 이미지 설명을 입력하십시오


color_print새로운 포맷터로 일부 업데이트 :

>>> from lazyme.string import palette, highlighter, formatter
>>> from lazyme.string import color_print
>>> palette.keys() # Available colors.
['pink', 'yellow', 'cyan', 'magenta', 'blue', 'gray', 'default', 'black', 'green', 'white', 'red']
>>> highlighter.keys() # Available highlights.
['blue', 'pink', 'gray', 'black', 'yellow', 'cyan', 'green', 'magenta', 'white', 'red']
>>> formatter.keys() # Available formatter, 
['hide', 'bold', 'italic', 'default', 'fast_blinking', 'faint', 'strikethrough', 'underline', 'blinking', 'reverse']

참고 : italic, fast blinkingstrikethrough모든 단말기에서 작동하지 않을 수 있습니다 맥 / 우분투에서 작동하지 않습니다.

예 :

>>> color_print('foo bar', color='pink', highlight='white')
foo bar
>>> color_print('foo bar', color='pink', highlight='white', reverse=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', bold=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', faint=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', faint=True, reverse=True)
foo bar
>>> color_print('foo bar', color='pink', highlight='white', underline=True, reverse=True)
foo bar

스크린 샷 :

여기에 이미지 설명을 입력하십시오


20
def black(text):
    print('\033[30m', text, '\033[0m', sep='')

def red(text):
    print('\033[31m', text, '\033[0m', sep='')

def green(text):
    print('\033[32m', text, '\033[0m', sep='')

def yellow(text):
    print('\033[33m', text, '\033[0m', sep='')

def blue(text):
    print('\033[34m', text, '\033[0m', sep='')

def magenta(text):
    print('\033[35m', text, '\033[0m', sep='')

def cyan(text):
    print('\033[36m', text, '\033[0m', sep='')

def gray(text):
    print('\033[90m', text, '\033[0m', sep='')


black("BLACK")
red("RED")
green("GREEN")
yellow("YELLOW")
blue("BLACK")
magenta("MAGENTA")
cyan("CYAN")
gray("GRAY")

온라인으로 시도


이것은 python3에만 해당됩니까? python2에 ''= 9월에 오류가있어
ScipioAfricanus

18.04 우분투 python3에서 완벽하게 작동
줄리어스 Prayogo

18

with키워드가 재설정해야하는 수정 자 (Python 3 및 Colorama 사용)와 얼마나 잘 혼합 되는지 확인하십시오 .

from colorama import Fore, Style
import sys

class Highlight:
  def __init__(self, clazz, color):
    self.color = color
    self.clazz = clazz
  def __enter__(self):
    print(self.color, end="")
  def __exit__(self, type, value, traceback):
    if self.clazz == Fore:
      print(Fore.RESET, end="")
    else:
      assert self.clazz == Style
      print(Style.RESET_ALL, end="")
    sys.stdout.flush()

with Highlight(Fore, Fore.GREEN):
  print("this is highlighted")
print("this is not")

사용, 색상 파노라마 밖으로 시도 print(Style.BRIGHT + "Header Test")하고 print (Style.DIM + word)정말 좋은 프롬프트를 만들 수 있습니다.
Tom

contextlibPy3 에 사용하려면 변경해야합니다 .
고양이

@cat : 어떤 버전의 Python이 필요할까요?
Janus Troelsen

나는 3 이상을 믿습니다. @contextlib.contextmanager데코레이터 가 있어야합니다 .
고양이

1
@ 고양이 : 왜? 없이 잘 작동합니다.
Janus Troelsen

17

curses 라이브러리의 Python 구현을 사용할 수 있습니다. http://docs.python.org/library/curses.html

또한 이것을 실행하면 상자가 나타납니다.

for i in range(255):
    print i, chr(i)

개인적으로 저는 '요청'이 'urllib'과 같은 방식으로 '축복'에 의해 '저주'라이브러리가 완전히 이탈되었다고 생각합니다.
Jonathan Hartley

17

CLINT를 사용할 수 있습니다.

from clint.textui import colored
print colored.red('some warning message')
print colored.green('nicely done!')

GitHub에서 가져옵니다 .


1
첫 번째 링크가 없어서 제거했습니다. GH 링크는 여전히 훌륭합니다 (프로젝트가 "아카이브"되고 기본적으로 내가 수집 할 수있는 것에서 버려짐).
Giacomo Lacava

15

나는 늦었다는 것을 안다. 그러나 ColorIt이라는 라이브러리가 있습니다 . 매우 간단합니다.

여기 몇 가지 예가 있어요.

from ColorIt import *

# Use this to ensure that ColorIt will be usable by certain command line interfaces
initColorIt()

# Foreground
print (color ('This text is red', colors.RED))
print (color ('This text is orange', colors.ORANGE))
print (color ('This text is yellow', colors.YELLOW))
print (color ('This text is green', colors.GREEN))
print (color ('This text is blue', colors.BLUE))
print (color ('This text is purple', colors.PURPLE))
print (color ('This text is white', colors.WHITE))

# Background
print (background ('This text has a background that is red', colors.RED))
print (background ('This text has a background that is orange', colors.ORANGE))
print (background ('This text has a background that is yellow', colors.YELLOW))
print (background ('This text has a background that is green', colors.GREEN))
print (background ('This text has a background that is blue', colors.BLUE))
print (background ('This text has a background that is purple', colors.PURPLE))
print (background ('This text has a background that is white', colors.WHITE))

# Custom
print (color ("This color has a custom grey text color", (150, 150, 150))
print (background ("This color has a custom grey background", (150, 150, 150))

# Combination
print (background (color ("This text is blue with a white background", colors.BLUE), colors.WHITE))

이것은 당신에게 제공합니다 :

ColorIt의 그림

또한 이것이 크로스 플랫폼이며 mac, linux 및 windows에서 테스트되었다는 점에 주목할 가치가 있습니다.

https://github.com/CodeForeverAndEver/ColorIt 을 사용해보십시오.

참고 : 깜박임, 이탤릭체, 굵게 등은 며칠 후에 추가됩니다.



11

Windows를 사용하는 경우 여기에 있습니다!

# display text on a Windows console
# Windows XP with Python27 or Python32
from ctypes import windll
# needed for Python2/Python3 diff
try:
    input = raw_input
except:
    pass
STD_OUTPUT_HANDLE = -11
stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
# look at the output and select the color you want
# for instance hex E is yellow on black
# hex 1E is yellow on blue
# hex 2E is yellow on green and so on
for color in range(0, 75):
     windll.kernel32.SetConsoleTextAttribute(stdout_handle, color)
     print("%X --> %s" % (color, "Have a fine day!"))
     input("Press Enter to go on ... ")

동일한 회선에서 다른 색상을 원하면 호출간에 stdout 스트림을 플러시하십시오.print("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
user2023861

11

Django를 사용하는 경우

>>> from django.utils.termcolors import colorize
>>> print colorize("Hello World!", fg="blue", bg='red',
...                 opts=('bold', 'blink', 'underscore',))
Hello World!
>>> help(colorize)

스냅 사진:

영상

(일반적으로 runserver 터미널에서 디버깅하기 위해 컬러 출력을 사용하므로 추가했습니다.)

머신에 설치되어 있는지 테스트 할 수 있습니다 :
$ python -c "import django; print django.VERSION"
설치 확인 : Django 설치 방법

시도 해봐!!


10

여기 저주가 있습니다 :

import curses

def main(stdscr):
    stdscr.clear()
    if curses.has_colors():
        for i in xrange(1, curses.COLORS):
            curses.init_pair(i, i, curses.COLOR_BLACK)
            stdscr.addstr("COLOR %d! " % i, curses.color_pair(i))
            stdscr.addstr("BOLD! ", curses.color_pair(i) | curses.A_BOLD)
            stdscr.addstr("STANDOUT! ", curses.color_pair(i) | curses.A_STANDOUT)
            stdscr.addstr("UNDERLINE! ", curses.color_pair(i) | curses.A_UNDERLINE)
            stdscr.addstr("BLINK! ", curses.color_pair(i) | curses.A_BLINK)
            stdscr.addstr("DIM! ", curses.color_pair(i) | curses.A_DIM)
            stdscr.addstr("REVERSE! ", curses.color_pair(i) | curses.A_REVERSE)
    stdscr.refresh()
    stdscr.getch()

if __name__ == '__main__':
    print "init..."
    curses.wrapper(main)

Windows (x64)에서이 오류와 함께 코드가 실패합니다. AttributeError : 'module'개체에 'wrapper'특성이 없습니다.
sorin

1
@Sorin Sbarnea는 : 파이썬의 공식 문서를 저주 따라서에 docs.python.org/library/curses.html , 저주 모듈은 윈도우에서 지원되지 않습니다. 테스트 파일의 이름을 "curses.py"로 지정했기 때문에 "No Such Module"대신 이와 같은 오류가 발생했을 수 있습니다.
nosklo

10

https://raw.github.com/fabric/fabric/master/fabric/colors.py

"""
.. versionadded:: 0.9.2

Functions for wrapping strings in ANSI color codes.

Each function within this module returns the input string ``text``, wrapped
with ANSI color codes for the appropriate color.

For example, to print some text as green on supporting terminals::

    from fabric.colors import green

    print(green("This text is green!"))

Because these functions simply return modified strings, you can nest them::

    from fabric.colors import red, green

    print(red("This sentence is red, except for " + \
          green("these words, which are green") + "."))

If ``bold`` is set to ``True``, the ANSI flag for bolding will be flipped on
for that particular invocation, which usually shows up as a bold or brighter
version of the original color on most terminals.
"""


def _wrap_with(code):

    def inner(text, bold=False):
        c = code
        if bold:
            c = "1;%s" % c
        return "\033[%sm%s\033[0m" % (c, text)
    return inner

red = _wrap_with('31')
green = _wrap_with('32')
yellow = _wrap_with('33')
blue = _wrap_with('34')
magenta = _wrap_with('35')
cyan = _wrap_with('36')
white = _wrap_with('37')

10

asciimatics 는 텍스트 UI 및 애니메이션 제작을위한 이식 가능한 지원을 제공합니다.

#!/usr/bin/env python
from asciimatics.effects import RandomNoise  # $ pip install asciimatics
from asciimatics.renderers import SpeechBubble, Rainbow
from asciimatics.scene import Scene
from asciimatics.screen import Screen
from asciimatics.exceptions import ResizeScreenError


def demo(screen):
    render = Rainbow(screen, SpeechBubble('Rainbow'))
    effects = [RandomNoise(screen, signal=render)]
    screen.play([Scene(effects, -1)], stop_on_resize=True)

while True:
    try:
        Screen.wrapper(demo)
        break
    except ResizeScreenError:
        pass

아스키 캐스트 :

ASCII 노이즈 중 무지개 색 텍스트


10

python 3 인쇄 기능을 래핑하는 또 다른 pypi 모듈 :

https://pypi.python.org/pypi/colorprint

python 2.x에서도 사용할 수 있습니다 from __future__ import print. 다음은 모듈 pypi 페이지의 python 2 예제입니다.

from __future__ import print_function
from colorprint import *

print('Hello', 'world', color='blue', end='', sep=', ')
print('!', color='red', format=['bold', 'blink'])

"Hello, world!"출력 파란색으로 된 단어와 느낌표가 굵은 빨간색으로 깜박입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.