Wie kann ich in Python farbigen Text an das Terminal ausgeben? Was ist das beste Unicode-Symbol für einen Volumenblock?
python
unicode
terminal
ansi-colors
aboSamoor
quelle
quelle
█
einzige Problem ist, dass es ASCII-erweitert ist. Vielleicht könnten Sie es zum Laufen bringen mithttp://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
Antworten:
Dies hängt etwas davon ab, auf welcher Plattform Sie sich befinden. Der häufigste Weg, dies zu tun, ist das Drucken von ANSI-Escape-Sequenzen. Als einfaches Beispiel finden Sie hier einige Python-Codes aus den Blender-Build-Skripten :
Um solchen Code zu verwenden, können Sie so etwas tun
oder mit Python3.6 +:
Dies funktioniert unter Unixen wie OS X, Linux und Windows (vorausgesetzt, Sie verwenden ANSICON oder in Windows 10, sofern Sie die VT100-Emulation aktivieren ). Es gibt Ansi-Codes zum Einstellen der Farbe, Bewegen des Cursors und mehr.
Wenn Sie damit kompliziert werden (und es klingt so, als ob Sie ein Spiel schreiben), sollten Sie sich das Modul "Flüche" ansehen, das viele der komplizierten Teile davon für Sie behandelt. Das Python Curses HowTO ist eine gute Einführung.
Wenn Sie kein erweitertes ASCII verwenden (dh nicht auf einem PC), bleiben Sie bei den ASCII-Zeichen unter 127 hängen, und '#' oder '@' ist wahrscheinlich die beste Wahl für einen Block. Wenn Sie sicherstellen können, dass Ihr Terminal einen erweiterten IBM ASCII-Zeichensatz verwendet , haben Sie viele weitere Optionen. Die Zeichen 176, 177, 178 und 219 sind die "Blockzeichen".
Einige moderne textbasierte Programme wie "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 im Zwergenfestungs-Wiki ( benutzerdefinierte Kachelsätze ).
Der Demo-Wettbewerb im Textmodus bietet mehr Ressourcen für die Erstellung von Grafiken im Textmodus.
Hmm .. Ich denke, diese Antwort hat mich ein wenig mitgerissen. Ich bin jedoch gerade dabei, ein episches textbasiertes Abenteuerspiel zu planen. Viel Glück mit Ihrem farbigen Text!
quelle
tput
, wie so da es in mehr portablen Code führt.disable
ist, wenn Sie die Ausgabe in eine Datei leiten . Während Tools wiecat
Farben unterstützen können, ist es im Allgemeinen besser, keine Farbinformationen in Dateien zu drucken.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)
.Ich bin überrascht, dass niemand das Python-Termcolor-Modul erwähnt hat . Die Verwendung ist ziemlich einfach:
Oder in Python 3:
Es ist jedoch möglicherweise nicht hoch genug für die Spielprogrammierung und die "farbigen Blöcke", die Sie ausführen möchten ...
quelle
termcolor.COLORS
gibt Ihnen eine Liste von Farbenos.system('color')
zuerst die ANSI-Escape-Sequenzen ausgeführt.Die Antwort lautet Colorama für alle plattformübergreifenden Farben in Python.
Ein Python 3.6-Beispiel-Screenshot:
quelle
<b>bold</b>
) zum Hinzufügen von Stil zum Terminaltext zu verwendenDrucken Sie eine Zeichenfolge, die eine Farbe / einen Stil beginnt, dann die Zeichenfolge und beenden Sie die Farb- / Stiländerung mit
'\x1b[0m'
:Rufen Sie eine Tabelle mit Formatoptionen für Shell-Text mit folgendem Code ab:
Hell-Dunkel-Beispiel (vollständig)
Beispiel Dark-on-Light (teilweise)
quelle
Definieren Sie eine Zeichenfolge, die eine Farbe beginnt, und eine Zeichenfolge, die die Farbe beendet, und drucken Sie dann Ihren Text mit der Startzeichenfolge vorne und der Endzeichenfolge am Ende.
Dadurch ergibt sich die folgende in
bash
, inurxvt
mit einem Farbschema Zenburn-style:Durch Experimente können wir mehr Farben erhalten:
Hinweis:
\33[5m
und\33[6m
blinken.Auf diese Weise können wir eine vollständige Farbkollektion erstellen:
Hier ist der Code zum Generieren des Tests:
quelle
\33[0m
oderCEND
darüber.Sie möchten mehr über ANSI-Escape-Sequenzen erfahren. Hier ist ein kurzes Beispiel:
Weitere Informationen finden Sie unter http://en.wikipedia.org/wiki/ANSI_escape_code
Versuchen Sie für ein Blockzeichen ein Unicode-Zeichen wie \ u2588:
Alles zusammen:
quelle
def d(*v): return '\x1B['+';'.join(map(str, v))+'m'
dannprint ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
Ich antworte, weil ich eine Möglichkeit gefunden habe, ANSI-Codes unter Windows 10 zu verwenden, damit Sie die Farbe von Text ohne Module ändern können, die nicht integriert sind:
Die Zeile, mit der dies funktioniert, ist
os.system("")
oder ein anderer Systemaufruf, mit dem Sie ANSI-Codes im Terminal drucken können:Hinweis: Obwohl dies dieselben Optionen wie andere Windows-Optionen bietet, unterstützt Windows ANSI-Codes trotz dieses Tricks nicht vollständig. Nicht alle Textdekorationsfarben funktionieren und alle "hellen" Farben (Codes 90-97 und 100-107) zeigen die gleichen Farben wie die regulären Farben (Codes 30-37 und 40-47).
Edit : Danke an @jl für die Suche nach einer noch kürzeren Methode.
tl; dr : Fügen Sie
os.system("")
oben in Ihrer Datei hinzu.Python-Version: 3.6.7
quelle
if sys.platform.lower() == "win32": os.system('color')
noch weiter vereinfachen können, indem Sie sie einfach durch just ersetzenos.system('')
. Es ist keine Bedingung erforderlich, und der Code läuft sowohl unter Windows 10 als auch unter Linux (als ich ihn getestet habe). Wie Sie sehen, müssen Sie keinen Systemaufruf durchführencolor
. Anrufe zudir
,cd
,abcdef
, und nur ein leerer String funktionieren (obwohl die nicht-leere Strings werden wahrscheinlich drucken Ausgabe , die Sie wollen nicht sehen).Mein Lieblingsweg ist die Blessings- Bibliothek (vollständige Offenlegung: Ich habe sie geschrieben). Zum Beispiel:
Um farbige Steine zu drucken, ist es am zuverlässigsten, Räume mit Hintergrundfarben zu drucken. Ich benutze diese Technik, um den Fortschrittsbalken in nasenprogressiv zu zeichnen :
Sie können auch an bestimmten Orten drucken:
Wenn Sie sich im Laufe Ihres Spiels mit anderen Terminalfunktionen herumschlagen müssen, können Sie dies auch tun. Sie können die Standard-Zeichenfolgenformatierung von Python verwenden, um die Lesbarkeit zu gewährleisten:
Das Schöne an Blessings ist, dass es sein Bestes tut, um an allen Arten von Terminals zu arbeiten, nicht nur an den (überwiegend üblichen) ANSI-Farbterminals. Außerdem werden unlesbare Escape-Sequenzen aus Ihrem Code herausgehalten, während die Verwendung präzise bleibt. Habe Spaß!
quelle
getattr
wenn Sie es brauchen. Oder erstellen Sie die Formatzeichenfolge eher dynamisch.can just pass
eine Python-Funktion.sty ähnelt colorama, ist jedoch weniger ausführlich, unterstützt 8- Bit- und 24- Bit- Farben (RGB), ermöglicht das Registrieren eigener Stile, unterstützt Muting, ist sehr flexibel, gut dokumentiert und bietet mehr.
Beispiele:
Drucke:
Demo:
quelle
Generierte eine Klasse mit allen Farben mithilfe einer for-Schleife, um jede Farbkombination bis zu 100 zu wiederholen, und schrieb dann eine Klasse mit Python-Farben. Kopieren Sie und fügen Sie ein, wie Sie wollen, GPLv2 von mir:
quelle
Versuchen Sie diesen einfachen Code
quelle
Unter Windows können Sie das Modul 'win32console' (in einigen Python-Distributionen verfügbar) oder das Modul 'ctypes' (Python 2.5 und höher) verwenden, um auf die Win32-API zuzugreifen.
Informationen zum vollständigen Code, der beide Möglichkeiten unterstützt, finden Sie im Farbkonsolen-Berichtscode von Testoob .
ctypes Beispiel:
quelle
Dumm einfach, basierend auf @ joelds Antwort
Dann einfach
quelle
print
-ersetzungen ? Einspruch aufgehoben.print
sollte man sicherstellen, dass ihre Funktionalität ordnungsgemäß repliziert wird.def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs)
</ code>Ich habe die Antwort von @joeld in ein Modul mit globalen Funktionen eingeschlossen, die ich überall in meinem Code verwenden kann.
Datei: log.py.
Verwenden Sie wie folgt:
quelle
Unter Windows können Sie nur dann mit Farben auf der Konsole drucken, wenn Sie win32api verwenden.
Für Linux ist es so einfach wie das Verwenden von print. Die hier beschriebenen Escape-Sequenzen sind:
Farben
Damit das Zeichen wie eine Box gedruckt werden kann, hängt es wirklich davon ab, welche Schriftart Sie für das Konsolenfenster verwenden. Das Pfund-Symbol funktioniert gut, hängt jedoch von der Schriftart ab:
quelle
quelle
Am Ende tat ich das, ich fand es am saubersten:
quelle
Aufbauend auf der Antwort von @joeld unter Verwendung von https://pypi.python.org/pypi/lazyme
pip install -U lazyme
:Bildschirmfoto:
Einige Updates
color_print
mit neuen Formatierern, zB:Hinweis:
italic
,fast blinking
undstrikethrough
kann auf allen Endgeräten nicht funktioniert, funktioniert nicht auf Mac / Ubuntu.Z.B
Bildschirmfoto:
quelle
Versuchen Sie es online
quelle
Beachten Sie, wie gut sich das
with
Schlüsselwort mit solchen Modifikatoren mischt, die zurückgesetzt werden müssen (mit Python 3 und Colorama):quelle
print(Style.BRIGHT + "Header Test")
undprint (Style.DIM + word)
eine wirklich schöne Eingabeaufforderung zu erstellen.contextlib
für Py3 verwendet zu werden.@contextlib.contextmanager
Dekorateur drauf haben, nein?Sie können die Python-Implementierung der Curses-Bibliothek verwenden: http://docs.python.org/library/curses.html
Führen Sie dies auch aus und Sie finden Ihre Box:
quelle
Sie könnten CLINT verwenden:
Hol es dir von GitHub .
quelle
Ich weiß, dass ich zu spät komme. Aber ich habe eine Bibliothek namens ColorIt . Es ist super einfach.
Hier sind einige Beispiele:
Dies gibt Ihnen:
Es ist auch erwähnenswert, dass dies plattformübergreifend ist und unter Mac, Linux und Windows getestet wurde.
Vielleicht möchten Sie es ausprobieren: https://github.com/CodeForeverAndEver/ColorIt
Hinweis: Blinken, Kursivschrift, Fettdruck usw. werden in wenigen Tagen hinzugefügt.
quelle
Wenn Sie ein Spiel programmieren, möchten Sie vielleicht die Hintergrundfarbe ändern und nur Leerzeichen verwenden? Zum Beispiel:
quelle
Wenn Sie Windows verwenden, können Sie loslegen!
quelle
print("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
Wenn Sie Django verwenden
Schnappschuss:
(Ich verwende im Allgemeinen eine farbige Ausgabe zum Debuggen auf dem Runserver-Terminal, also habe ich sie hinzugefügt.)
Sie können testen, ob es auf Ihrem Computer
$ python -c "import django; print django.VERSION"
installiert ist : Um es zu installieren, überprüfen Sie: So installieren Sie Django
Versuche es!!
quelle
Hier ist ein Fluchbeispiel:
quelle
https://raw.github.com/fabric/fabric/master/fabric/colors.py
quelle
asciimatics bietet eine tragbare Unterstützung für das Erstellen von Textoberflächen und Animationen:
Asciicast:
quelle
Noch ein Pypi-Modul, das die Python 3-Druckfunktion umschließt:
https://pypi.python.org/pypi/colorprint
Es ist in Python 2.x verwendbar, wenn Sie auch
from __future__ import print
. Hier ist ein Python 2-Beispiel von der Modul-Pypi-Seite:Ausgänge "Hallo Welt!" mit den Wörtern in blau und dem Ausrufezeichen fett rot und blinkend.
quelle