Wie kann ich in Python farbigen Text auf dem Terminal ausgeben?
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?
Wie kann ich in Python farbigen Text auf dem Terminal ausgeben?
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.
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?
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?
Unter Linux sollten Sie vielleicht die Option tput
, so da dies zu besser portierbarem Code führt.
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')
Da es ANSI-Codes ausgibt, funktioniert es unter Windows (DOS-Konsolen), wenn ansi.sys geladen ist? support.microsoft.com/kb/101875
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.
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.
@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
Dies sollte in der Standardbibliothek enthalten sein... Plattformübergreifende Farbunterstützung ist wichtig, denke ich.
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')
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()
Referenz: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
Dies funktioniert in den meisten Shells und auch in Ipython, gut genug für die meisten Anwendungen
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:
Durch Experimentieren können wir mehr Farben erhalten:
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
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 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.
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-ascii-codes-with-python
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
0 Stimmen
Wie wäre es mit stackoverflow.com/a/42528796/610569 mit pypi.python.org/pypi/lazyme ? (Haftungsausschluss: schamlose Werbung)
0 Stimmen
Wenn Sie kein zusätzliches Paket installieren möchten, gehen Sie folgendermaßen vor neue Antwort .