3156 Stimmen

Wie drucke ich farbigen Text auf dem Terminal in Python?

Wie kann ich in Python farbigen Text auf dem Terminal ausgeben?

1 Stimmen

Dieses Symbol eignet sich hervorragend für einen farbigen Block: Das einzige Problem ist, dass es sich um erweitertes ASCII handelt, vielleicht kann man es mit http://stackoverflow.com/questions/8465226/using-extended-as‌​cii-codes-with-pytho‌​n

1 Stimmen

Einige Terminals können auch Unicode-Zeichen anzeigen. Wenn dies auf Ihr Terminal zutrifft, sind die möglichen Zeichen fast unbegrenzt.

9 Stimmen

Diese Antwort kam ziemlich spät, aber sie scheint mir die beste zu sein... die anderen Antworten erfordern spezielle Hacks für Windows, während diese Antwort einfach funktioniert: stackoverflow.com/a/3332860/901641

2838voto

joeld Punkte 27698

Dies hängt davon ab, auf welcher Plattform Sie sich befinden. Die gebräuchlichste Art, dies zu tun, ist das Drucken von ANSI-Escape-Sequenzen. Ein einfaches Beispiel ist der folgende Python-Code aus dem Blender Build-Skripte :

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

Um einen solchen Code zu verwenden, können Sie etwa so vorgehen:

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

Oder mit Python 3.6+:

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

Dies funktioniert unter Unixen, einschließlich OS X, Linux und Windows (vorausgesetzt, Sie verwenden ANSICON oder in Windows 10, sofern Sie die Option VT100-Emulation ). Es gibt ANSI-Codes zum Einstellen der Farbe, zum Bewegen des Cursors und mehr.

Wenn Sie das Ganze kompliziert machen wollen (und das scheint der Fall zu sein, wenn Sie ein Spiel schreiben), sollten Sie sich mit dem " verflucht "Modul, das einen Großteil der komplizierten Aufgaben für Sie übernimmt. Das Python Flüche HowTO ist eine gute Einführung.

Wenn Sie kein erweitertes ASCII verwenden (d.h. nicht auf einem PC), müssen Sie sich mit den ASCII-Zeichen unter 127 begnügen, und '#' oder '@' ist wahrscheinlich die beste Wahl für einen Block. Wenn Sie sicherstellen können, dass Ihr Terminal ein IBM erweiterter ASCII-Zeichensatz haben Sie viel mehr Möglichkeiten. Die Zeichen 176, 177, 178 und 219 sind die "Blockzeichen".

Einige moderne textbasierte Programme, wie z. B. "Dwarf Fortress", emulieren den Textmodus in einem grafischen Modus und verwenden Bilder der klassischen PC-Schriftart. Einige dieser Bitmaps, die Sie verwenden können, finden Sie in der Zwergenfestung Wiki siehe ( benutzerdefinierte Tilesets ).

El Textmodus-Demo-Wettbewerb verfügt über mehr Ressourcen für die Erstellung von Grafiken im Textmodus.

0 Stimmen

Aber nehmen Sie an, dass meine Standard-Eingabeaufforderung nicht schwarz ist - denken Sie, dass es möglich ist, Python nach diesen Tricks neu zu starten?

0 Stimmen

Ein weiteres nützliches Beispiel ist UNDERLINE = '\033[4m' . Was passiert, wenn ansi.sys unter Windows deaktiviert ist und Sie versuchen, diese ANSI-Escape-Sequenzen zu verwenden?

14 Stimmen

Unter Linux sollten Sie vielleicht die Option tput , so da dies zu besser portierbarem Code führt.

1168voto

Samat Jain Punkte 14300

Außerdem gibt es die Python-Modul termcolor . Die Verwendung ist ziemlich einfach:

from termcolor import colored

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

Oder in Python 3:

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

Für die Spieleprogrammierung und die "bunten Blöcke", die Sie machen wollen, ist es aber vielleicht nicht anspruchsvoll genug...

Um die ANSI-Codes unter Windows zum Laufen zu bringen, führen Sie zunächst

os.system('color')

4 Stimmen

Da es ANSI-Codes ausgibt, funktioniert es unter Windows (DOS-Konsolen), wenn ansi.sys geladen ist? support.microsoft.com/kb/101875

45 Stimmen

Ich habe gerade bemerkt, dass es seit dem 13/01/2011 unter MIT-Lizenz steht.

18 Stimmen

Hat keine Untests (im Gegensatz zu Colorama) und wurde seit 2011 nicht mehr aktualisiert

1066voto

priestc Punkte 29538

Die Antwort lautet Colorama für alle plattformübergreifenden Färbungen in Python.

Es unterstützt sowohl Python 3.5+ als auch Python 2.7.

Und ab Januar 2021 wird sie beibehalten.

Beispiel-Screenshot: example screenshot

495 Stimmen

Als Autor von Colorama danke ich Ihnen für die Erwähnung @nbv4. Ich werde versuchen, ein wenig zu erklären: Colorama zielt darauf ab, Python-Programme farbigen Terminaltext auf allen Plattformen ausgeben zu lassen, wobei dieselben ANSI-Codes verwendet werden, wie in vielen anderen Antworten auf dieser Seite beschrieben. Unter Windows entfernt Colorama diese ANSI-Zeichen aus stdout und wandelt sie in entsprechende win32-Aufrufe für farbigen Text um. Auf anderen Plattformen tut Colorama nichts. Sie können also ANSI-Codes oder Module wie Termcolor verwenden, und mit Colorama 'funktionieren' sie einfach auf allen Plattformen. Das ist jedenfalls die Idee.

7 Stimmen

@Jonathan, Das ist wirklich eine fantastische Bibliothek! Die Fähigkeit, plattformübergreifende Farbe Python Ausgabe ist wirklich sehr schön und nützlich. Ich stelle Werkzeuge für eine Bibliothek bereit, die ihre eigene Konsole einfärbt. Ich kann die Ausgabe dieser Konsole an das Terminal umleiten und die Ausgabe einfärben. Jetzt kann ich die Bibliothek sogar so einrichten, dass der Benutzer die Farben auswählen kann. So können auch Farbenblinde Dinge einstellen, damit sie die Ausgabe richtig sehen können. Danke

95 Stimmen

Dies sollte in der Standardbibliothek enthalten sein... Plattformübergreifende Farbunterstützung ist wichtig, denke ich.

669voto

rabin utam Punkte 12108

Eine Zeichenkette drucken, die mit einer Farbe/einem Stil beginnt, dann die Zeichenkette, und dann den Farb-/Stilwechsel mit '\x1b[0m' :

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

Success with green background example

Holen Sie sich eine Tabelle mit Formatierungsoptionen für Shelltext mit dem folgenden Code:

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()

Licht-auf-Dunkel-Beispiel (vollständig)

Enter image description here

Dunkel-auf-Licht Beispiel (teilweise)

Top part of output

Referenz: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors

11 Stimmen

Dies funktioniert in den meisten Shells und auch in Ipython, gut genug für die meisten Anwendungen

4 Stimmen

Darf ich fragen, welches Terminal das ist?

4 Stimmen

Wie tragbar ist es?

329voto

qubodup Punkte 7298

Definieren Sie eine Zeichenfolge, mit der eine Farbe beginnt, und eine Zeichenfolge, mit der die Farbe endet. Drucken Sie dann Ihren Text mit der Startzeichenfolge am Anfang und der Endzeichenfolge am Ende.

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

Dies führt in Bash zu folgendem Ergebnis, in urxvt mit einem Farbschema im Zenburn-Stil:

Output colors

Durch Experimentieren können wir mehr Farben erhalten:

Color matrix

Note : \33[5m y \33[6m blinken.

Auf diese Weise können wir eine vollfarbige Kollektion erstellen:

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'

Hier ist der Code zur Erstellung des Tests:

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

3 Stimmen

Welche Shell oder welches Terminal lässt sie blinken?

2 Stimmen

(u)rxvt zum Beispiel

0 Stimmen

FYI - Was oben als "beige" bezeichnet wird, ist ein helles Cyan auf Apples Terminal (und auch in vielen anderen Listen von Farbnamen für Python). Außerdem sind einige der Doppelfarben helle/dunkle Versionen, und die weißen Varianten würde ich als weiß und grau bezeichnen ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X