Drucken von farbigem text in terminal, in Python?
Wie kann ich die Ausgabe von farbigem text auf das terminal, in Python?
Was ist die beste Unicode-symbol zu repräsentieren, einen festen block?
- Sollten Sie einige zusätzliche Informationen, um bessere Antworten: Multiplattform? sind externe Module anerkannt?
- IPython gilt es, die cross-Plattform. Sehen Sie, was Sie verwenden?
- Dieses symbol würde einen großen farbigen block:
█
problem ist Nur, dass es erweiterte ASCII -, vielleicht könnten Sie es bekommen, um die Arbeit mithttp://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
- Einige terminals können auch anzeigen von Unicode-Zeichen. Wenn das wahr ist, für Ihr terminal, die möglichen Zeichen sind fast unbegrenzt.
- Diese Antwort kam ziemlich spät, aber es scheint das beste für mich... diejenigen, die gewählt darüber erfordern spezielle hacks für Windows in der Erwägung, dass dies eine einfach funktioniert es: stackoverflow.com/a/3332860/901641
- führen Sie
pip install ipython
und fügen Siealias python="ipython"
zu deinem shell startup Skript (z.B.~/.bashrc
für die bash-shell) - Wie etwa stackoverflow.com/a/42528796/610569 mit pypi.python.org/pypi/lazyme ? (disclaimer: shameless plug)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese etwas hängt davon ab, auf welcher Plattform Sie sich befinden. Der häufigste Weg, dies zu tun ist durch den Druck die ANSI-escape-Sequenzen. Für ein einfaches Beispiel, hier einige python-code aus der blender-build-Skripte:
Verwenden, code wie diesen, kann man etwas tun, wie
Diese arbeiten auf UNIX-Versionen, einschließlich OS X, linux und windows (vorausgesetzt, Sie verwenden ANSICON, oder in Windows 10 zur Verfügung gestellt, die Sie aktivieren VT100-emulation). Es gibt ansi-codes für die Einstellung der Farbe, bewegen Sie den cursor, und mehr.
Wenn Sie sich zu kompliziert mit diesem (und es klingt wie Sie sind, wenn Sie schreiben, ein Spiel), sollten Sie schauen in den "Flüche" - Modul, mit einer Menge von komplizierten teilen für Sie. Die Python-Curses-HowTO ist eine gute Einführung.
Wenn Sie nicht mit erweiterter ASCII (also nicht auf einem PC), Sie sind fest mit dem ascii-Zeichen unterhalb von 127, und '#' oder '@' ist wahrscheinlich Ihre beste Wette für einen block. Wenn Sie sicherstellen können, Ihr terminal ist mit einem IBM erweiterte ascii-Zeichensatz, haben Sie viele weitere Optionen. Zeichen 176, 177, 178 und 219 sind die "block-Zeichen".
Einige moderne text-basierte Programme, wie etwa "Dwarf Fortress", zu emulieren text-Modus in einen grafischen Modus, und verwenden die Bilder der klassischen PC-font. Sie finden einige dieser bitmaps, die Sie verwenden können, auf die Dwarf Fortress Wiki sehen (Benutzer-made-tilesets).
Den Text Mode Demo Contest hat mehr Ressourcen für das tun von Grafiken im text-Modus.
Hmm.. denke ich hab ein wenig mitreißen auf diese Antwort. Ich bin mitten in der Planung einer epischen text-basiertes adventure-Spiel, obwohl. Viel Glück mit Ihrem farbigen text!
disabled
verwendet?bcolors
Instanz. Zum Beispiel könnten Sie einebcolors
- Instanz und verwenden Sie die member-Variablen der Instanz zu drucken-färben-Zeichen, aber dann, wenn Sie sich entschieden, Sie wollte nicht mehr färben zu nennen, könnten Siedisable
vor dem Druck, die Zeichen, und Sie würde nur ausdrucken als leere Zeichenfolgen.BOLD = "\033[1m"
wenn Sie möchten, dass Fett formatierter text (nützlich für Kopf).UNDERLINE = '\033[4m'
. Was passiert, wennansi.sys
ist deaktiviert auf Windows, und Sie versuchen, diese ANSI-escape-Sequenzen?tput
, so wie, denn Sie führt zu mehr portablen code.disable
ist, wenn Sie leiten Sie die Ausgabe in eine Datei; während Werkzeuge wiecat
kann Unterstützung von Farben, ist es im Allgemeinen besser, nicht in Farbe ausdrucken, Informationen zu Dateien.$TERM
! Besser verwenden Sie ein standard-termcap-Bibliothek finden Sie von dem Namen...print(''.join(['\033[' + str(x) + 'mfoo' for x in range(0,150)]) +'\033[0m')
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)
.ESC
(d.h. das Zeichen #27 in der ASCII-Tabelle).33
und1B
sind einfach die oktale und die hexadezimale Darstellung der Dezimalzahl 27.print('\033[94mfoo')
in meinem terminal, wird der text in meinem terminal nach, das ist blau... Wie kann ich das verhindern?\033[0m
. Mit dem Beispiel oben, anfügenbcolors.ENDC
nach einer zuvor eingeleiteten Farbe.1;
wird es auch Fett. Wie\033[1;Xm
(wobei X Farb-code)Ich bin überrascht, niemand hat erwähnt das Python-Modul termcolor. Verwendung ist ziemlich einfach:
Oder in Python 3:
Kann es nicht anspruchsvoll genug, aber für das Spiel Programmieren und die "farbige Blöcke", die Sie wollen, zu tun...
cprint()
Funktion:cprint('Hello, World!', 'green', 'on_red')
.termcolor.COLORS
gibt Ihnen eine Liste der Farben.format()
für das hinzufügen von Variablen in der gedruckten Zeichenfolge wie diese:print(colored('{0}', 'red').format(var_with_msg))
. Schöne Lösung! Tksos.system('color')
zuerst, dann die ANSI-escape-Sequenzen zu arbeiten beginnen.Die Antwort ist Colorama für alle cross-Plattform-Färbung in Python.
Python 3.6 Beispiel-screenshot:
<b>bold</b>
) für das hinzufügen von Stil, um text-terminalColorama
kommt mit Anaconda, in der Erwägung, dasstermcolor
, schlug in einer Antwort oben nicht. Dies merkteColorama
sehr vorzuziehen für viele Python-Nutzer.import colorama
- und call -colorama.init()
so dass, wenn Sie drucken Sie das Ergebnis auf stdout aus, es funktioniert auf Windows als auch anderswo.Drucken Sie eine Zeichenfolge, die beginnt, eine Farbe/Stil, dann den string, dann Ende der Farb - /Stil-Wechsel mit
'\x1b[0m'
:Eine Tabelle mit format-Optionen für shell-text mit dem folgenden code:
Licht-auf-dunkel-Beispiel (komplett)
Dark-on-light-Beispiel (Teil -)
Definieren Sie eine Zeichenfolge, die beginnt mit einer Farbe und einem string, die enden der Farbe, dann drucken Sie Ihren text mit den start-string auf der Vorder-und end-Zeichenfolge am Ende.
Daraus ergibt sich folgende in
bash
imurxvt
mit einem Zenburn-Stil, Farbschema:Durch Experimente, die wir bekommen können mehr Farben:
Hinweis:
\33[5m
und\33[6m
blinken.Diese Weise schaffen wir eine farbenreiche Kollektion:
Hier ist der code zum generieren des test:
\33[0m
oderCEND
oben.Möchten Sie Informationen zu ANSI-escape-Sequenzen. Hier ein kurzes Beispiel:
Weitere Infos finden Sie unter http://en.wikipedia.org/wiki/ANSI_escape_code
Für ein block-Charakter, versuchen Sie ein unicode-Zeichen wie \u2588:
Alles zusammen:
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)])
Meine Lieblings-Weg ist mit der Segen Bibliothek (full disclosure: ich schrieb es). Zum Beispiel:
Drucken, farbigen Steinen, die zuverlässigste Weg ist, um print-Bereiche mit der Hintergrundfarbe. Ich verwende diese Technik zu ziehen der Fortschrittsbalken in Nase-progressive:
Drucken können Sie in bestimmten Orten auch:
Wenn Sie muck mit anderen terminal-Fähigkeiten im Laufe des Spiels, können Sie das auch tun. Sie können die Python-standard-string-Formatierung, um halten Sie es lesbar ist:
Die nette Sache über Segen ist, dass es nicht seine beste Arbeit auf allen Arten von Endgeräten, nicht nur die (überwiegend allgemein) ANSI-Farbe lieben. Es hält auch nicht lesbar escape-Sequenzen aus Ihrem code, während verbleibenden prägnant zu verwenden. Spaß haben!
getattr
wenn Sie es brauchen. Oder, wahrscheinlicher, nur das erstellen der format-string dynamisch statt.can just pass
eine python-Funktion.generiert eine Klasse, bei der alle Farben über eine for-Schleife zum Durchlaufen aller Kombinationen von Farbe bis zu 100, dann schreibt eine Klasse mit python-Farben. Kopieren und einfügen wie du willst, GPLv2 von mir:
Versuchen Sie diese einfachen code -
sty ist ähnlich dem Effekt "colorama", aber es ist weniger ausführlich, unterstützt 8bit und 24bit (rgb -) Farben, können Sie registrieren Ihre eigenen Farben, ist wirklich flexibel und gut dokumentiert.
Drucke:
Demo:
Unter Windows können Sie Modul 'win32console' (verfügbar in einigen Python-Distributionen) oder Modul 'ctypes' (Python 2.5 und höher) Zugriff auf die Win32-API.
Komplett zu sehen-code, der unterstützt beide Wege, sehen die color console-reporting-code von Testoob.
ctypes Beispiel:
Dumm einfach und basiert auf dem @joeld Antwort
Dann nur
print
-Ersatz? Einwand aufgehoben.print
sollte man darauf achten, richtig zu replizieren seine Funktionalität.Ich gewickelt habe @joeld Antwort in ein Modul mit globalen Funktionen, die ich verwenden können, irgendwo in meinem code.
Datei: log.py
verwenden Sie wie folgt:
Für Windows, die Sie nicht drucken auf der Konsole mit Farben, es sei denn, Sie sind mit der win32api.
Für Linux-es ist so einfach, wie mit print, mit der escape-Sequenzen, die hier beschrieben werden:
Farben
Für die Zeichen zu drucken, wie eine box, es hängt wirklich davon ab, welche schriftart Sie verwenden für die Konsole-Fenster. Die Pfund-symbol funktioniert gut, aber es hängt von der schriftart:
Landete ich dabei, ich fühlte, es war die sauberste:
Gebäude auf @joeld Antwort, mit https://pypi.python.org/pypi/lazyme
pip install -U lazyme
:Screenshot:
Einige updates für die
color_print
mit neuen Formatierer, z.B.:Hinweis:
italic
,fast blinking
undstrikethrough
funktioniert möglicherweise nicht auf allen terminals funktionieren nicht auf Mac /Ubuntu.E. g.
Screenshot:
Hinweis, wie gut die
with
Stichwort mischt sich mit Modifikatoren wie diese, die müssen zurückgesetzt werden (mit Python 3 und Colorama):print(Style.BRIGHT + "Header Test")
undprint (Style.DIM + word)
eine wirklich nette Aufforderung.contextlib
für Py3.@contextlib.contextmanager
decorator auf, Nein?@contextlib.contextmanager
ist ein Sammelbegriff für wodurch es einfacher, zu produzieren, Kontext-Manager, aber man kann immer noch mit normalen context-Manager.Können Sie mit der Python-Implementierung der curses-Bibliothek:
http://docs.python.org/library/curses.html
Auch, laufen diese und finden Sie Ihr Feld:
Könnten Sie CLINT:
Sie bekommen von GitHub.
Bin ich reagiert, weil ich habe herausgefunden, ein Weg, um die Verwendung von ANSI-codes auf windows, so dass Sie können ändern Sie die Farbe von text ohne jegliche Module:
Der Linie macht diese Arbeit ist
os.system('color')
, aber stellen Sie sicher, dass Sie keine Fehler auslösen, wenn die person nicht unter Windows könnte man mit diesem Skript:Python Version: 3.6.7 (32 bit)
Wenn Sie ein Spiel Programmieren vielleicht möchten Sie den hintergrund ändern, die Farbe und verwenden Sie nur die Räume? Zum Beispiel:
Wenn Sie Windows verwenden, dann hier gehen Sie!
print("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
asciimatics bietet eine portable Unterstützung zur Erstellung von text-UI und Animationen:
Asciicast:
Hier ist eine curses-Beispiel:
https://raw.github.com/fabric/fabric/master/fabric/colors.py
YAY! eine andere version
während ich finde diese Antwort hilfreich, ich habe Sie ein bisschen verändert. diese Github-Gist ist das Ergebnis
Nutzung
zusätzlich können Sie die wrap-common usages:
https://gist.github.com/Jossef/0ee20314577925b4027f
Weiteres pypi-Modul, das wickelt sich der python-3-print-Funktion:
https://pypi.python.org/pypi/colorprint
Es ist verwendbar in python 2.x wenn Sie auch
from __future__ import print
. Hier ist ein python-Beispiel 2 aus den Modulen pypi-Seite:Ausgabe "Hallo, Welt!" mit den Worten in blau und das Ausrufezeichen Fett rot und blinkend.
Eine einfachere Möglichkeit wäre die Verwendung der
cprint
Funktion vontermcolor
Paket.Es unterstützt auch
%s, %d
format druckenWenn Sie Django
snapshot:
(Ich verwende in der Regel farbige Ausgabe zum Debuggen auf runserver-terminal, so dass ich Hinzugefügt.)
Sie können testen, ob es auf Ihrem Rechner installiert ist:
$ python -c "import django; print django.VERSION"
Um es zu installieren überprüfen: Wie zu installieren Django
Probieren Sie es aus!!
Für die Charaktere
Ihrem terminal wahrscheinlich verwendet Unicode (in der Regel UTF-8-codierte Zeichen), so ist es nur eine Frage der entsprechenden schriftart-Auswahl, um zu sehen, Ihre Lieblings-Charakter. Unicode char U+2588, "Full-block" ist die, die ich schlage vor, Sie verwenden.
Versuchen Sie Folgendes:
Untersuchen Sie die Datei später mit Ihrem Lieblings-viewer.
Für die Farben
Flüche ist das Modul, das Sie verwenden möchten. Überprüfen Sie diese tutorial.
Schrieb ich ein Modul, das Farben behandelt in Linux/OSX/Windows. Es unterstützt alle 16 Farben auf allen Plattformen, können Sie Vordergrund-und hintergrund-Farben zu verschiedenen Zeiten, und die string-Objekte geben, vernünftige Ergebnisse für Dinge wie len() und .capitalize().
https://github.com/Robpol86/colorclass
Schrieb ich ein einfaches Modul, verfügbar in:
http://pypi.python.org/pypi/colorconsole
Es funktioniert mit Windows, Mac OS X und Linux.
Es verwendet ANSI für Linux und Mac, aber native Aufrufe von console-Funktionen auf Windows.
Sie haben Farben, cursor-Positionierung und der Tastatur. Es ist kein Ersatz für Flüche, aber kann sehr nützlich sein, wenn Sie brauchen, um einfache Skripte oder ASCII-Spiele.
Verwenden pyfancy es ist ein einfacher Weg, dies zu tun Farbe in der Klemme!
Beispiel:
Können Sie shell-escape-Zeichen, die aus jeder Sprache.
Diese escape-Zeichen beginnen Sie mit der ESC-Zeichen gefolgt von einer Zahl von Argumenten.
Beispielsweise zur Ausgabe eines roten
Hello world
string im terminal:Oder aus einem python-Skript:
Außerdem schrieb ich einen Artikel über Escape-Sequenzen, die können wahrscheinlich helfen Sie bekommen ein besseres Verständnis dieses Mechanismus. Ich hoffe es wird Euch helfen.
\e
escape-Sequenz. Nur weil etwasecho
Implementationen unterstützen es nicht, machen diese Sequenzen, die allgemein zugänglich sind.\e
ist nicht Teil des POSIX-Spezifikation fürecho
, so ist es nicht überall gibt. Die GNU coreutils-version unterstützt, nicht jedoch die auf OS-X (BSD-Variante). Nicht zuletzt ist die Reihenfolge der nicht eine shell-Funktion entweder, es ist spezifisch für dieecho
Befehl.Zur Lösung dieses Problems erstellte ich ein mind-numbingly einfaches Paket zu druckenden Zeichenfolgen mit interpolierten Farb-codes, genannt icolor.
icolor enthält zwei Funktionen:
cformat
undcprint
, die jeweils eine Zeichenfolge mit Teilstrings, die interpoliert werden, um anzeigen zu ANSI-escape-Sequenzen z.B.Alle ANSI-Farben enthalten sind (z.B.
#RED;
,#BLUE;
usw.), sowie#RESET;
,#BOLD;
und andere.Hintergrund Farben haben eine
x
Präfix, also ein grüner hintergrund wäre#xGREEN;
.Kann man entkommen
#
mit##
.In seiner Einfachheit, die beste Dokumentation ist wahrscheinlich der code selbst.
Ist es auf PYPI, so kann man
sudo easy_install icolor
.Meine zwei Cent (PyColorTerm):
Installation:
Python-Skript:
arbeitet"OK!" zeigt in grün.
Ich bin noob in python und ich freue mich jedes mal entdecke ich Themen, wie dieses hier. Aber dieses mal(plötzlich) ich fühle mich als hätte ich was zu sagen. Vor allem, weil vor einigen Minuten entdeckte ich ein WOW-Ding in python(zumindest für mich jetzt):
Kontext-Manager
BEISPIEL
oder einfach nur so: