3256 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

185voto

SimpleBinary Punkte 1728

Hier ist eine Lösung, die nativ unter Windows 10 funktioniert.

Mit einem Systemaufruf, wie os.system("") ermöglicht es, Farben in der Eingabeaufforderung und in Powershell nativ zu drucken:

import os

# System call
os.system("")

# Class of 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!")

Hinweis: Windows unterstützt ANSI-Codes nicht vollständig, weder durch Systemaufrufe noch durch Module. Nicht alle Textdekorationen werden unterstützt, und obwohl die hellen Farben angezeigt werden, sind sie mit den normalen Farben identisch.

Dank an @j-l, der eine noch kürzere Methode gefunden hat.

tl;dr : hinzufügen os.system("")

3 Stimmen

Das funktioniert - ich bin wirklich überrascht, dass der Farbbefehl ANSI-Codes im Windows-Terminal aktiviert, ich habe jahrelang nicht gewusst, dass dies möglich ist - der Befehl selbst gibt keinen Hinweis darauf, dass er dies tut.

0 Stimmen

@anaksunaman Dies wird auf allen Betriebssystemen funktionieren, die bereits farbigen Text unterstützen, und auch Windows 10 unterstützen.

0 Stimmen

@MaxDoesStuff Wirklich? Welche Python-Version verwenden Sie? Und welche Version von MacOS?

116voto

Rotareti Punkte 39876

sty ist ähnlich wie colorama, aber es ist weniger ausführlich, unterstützt 8-Bit y 24-Bit (RGB) Farben, unterstützt alle Auswirkungen (fett, unterstrichen usw.), können Sie Ihre eigenen Stile eintragen ist vollständig typisiert und hochleistungsfähig, unterstützt Stummschaltung nicht mit Globals wie z. B. sys.stdout ist wirklich flexibel, gut dokumentiert und mehr...

Beispiele:

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

Drucke:

Enter image description here

Demo:

Enter image description here

8 Stimmen

Es wäre sehr nützlich, wenn Sie betrachten, um es mit colorama zu vergleichen, ich bevorzuge Ihre Bibliothek, sondern nur, weil mehr kurze api aus der Box, und es wäre toll, wenn es mehr populär sein wird. Danke!

1 Stimmen

Ich mag sty und ich versuche, meine Zeichenfolge mit sty zu formatieren, ein Problem ist, dass, wenn ich mehrere Farben drucken, kann ich auf vorherige Farbe anstelle von Standardfarbe zurücksetzen?

0 Stimmen

@VictorGavro Das ist eine gute Idee! Ich werde vielleicht einen Vergleich in die Dokumentation aufnehmen.

116voto

Bryan Oakley Punkte 337213

Sie möchten etwas über ANSI-Escape-Sequenzen lernen. Hier ist ein kurzes Beispiel:

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

Weitere Informationen finden Sie unter _ANSI-Escape-Code_ .

Versuchen Sie für ein Blockzeichen ein Unicode-Zeichen wie \u2588 :

print(u"\u2588")

Alles zusammengenommen:

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

4 Stimmen

Versuchen Sie def d(*v): return '\x1B['+';'.join(map(str, v))+'m' entonces print ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])

0 Stimmen

Was bedeutet hier "zurücksetzen"?

0 Stimmen

Ich habe diese Lösung ausprobiert. Was ist der Zweck von "31;40m" et "0m" ?

103voto

Will McGugan Punkte 1325

Reich ist eine relativ neue Python-Bibliothek für die Arbeit mit Farben im Terminal.

Es gibt einige Möglichkeiten, mit Farbe in Rich zu arbeiten. Am schnellsten geht es mit der Rich-Print-Methode, die eine BBCode -ähnliche Syntax in ANSI-Steuercodes umzuwandeln:

from rich import print
print("[red]Color[/] in the [bold magenta]Terminal[/]!")

Es gibt andere Möglichkeiten, Farbe mit Rich (Regex, Syntax) und verwandten Formatierungsfunktionen anzuwenden.

Screenshot of Rich

82voto

CircuitSacul Punkte 1113

Dies ist meiner Meinung nach die einfachste Methode. Solange Sie die RGB-Werte der gewünschten Farbe haben, sollte dies funktionieren:

def colored(r, g, b, text):
    return f"\033[38;2;{r};{g};{b}m{text}\033[38;2;255;255;255m"

Ein Beispiel für den Druck von rotem Text:

text = 'Hello, World!'
colored_text = colored(255, 0, 0, text)
print(colored_text)

#or

print(colored(255, 0, 0, 'Hello, World!'))

Mehrfarbiger Text

text = colored(255, 0, 0, 'Hello, ') + colored(0, 255, 0, 'World')
print(text)

11 Stimmen

Dies ist eigentlich die richtige Antwort auf die Frage und sollte ausgewählt werden. Die Frage ist, wie man Farben in Python drucken kann und NICHT, welche externen Bibliotheken verwendet werden können.

0 Stimmen

Es wird "[38;2;255;0;0mbubble [38;2;255;255;255m" gedruckt, wenn ich einen roten String "bubble" erstelle. Dies ist ein W10-Rechner... ist Ihre Lösung *nix-spezifisch?

1 Stimmen

@mike_rodent Dies ist nicht *nix-spezifisch, sondern hängt davon ab, ob das Terminal die ANSI

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