del_line.py
import sys
sys.stdout.write("\033[2K\033[G")
sys.stdout.flush()
sample.py
import sys, time
for i in range(10):
s = str(i)*(10-i)
sys.stdout.write("\033[2K\033[G%s" % s)
sys.stdout.flush()
time.sleep(0.5)
print()
Die nächste Ausgabe wird alle 0,5 Sekunden in derselben Zeile angezeigt, wodurch die vorherige Ausgabe gelöscht wird.
0000000000
111111111
22222222
3333333
444444
55555
6666
777
88
9
Sie können CSI verwenden, um den Konsolenbildschirm für die Standardausgabe und die Fehlerausgabe zu steuern. Referenz: https://en.wikipedia.org/wiki/ANSI_escape_code Zusätzlich zum Löschen von Zeichen können Sie den Cursor bewegen und die Farbe der Zeichen ändern.
Die zweite Zeile \ 033 [2K
von del_line.py entspricht" EL - In Zeile löschen "in den CSI-Codes des obigen Wikis und ist ein Befehl zum Löschen der Zeile mit dem Cursor. Wenn Sie CSI mit der Meldung verwenden, dass \ 033 [
CSI verwendet, wird es zuerst ausgegeben.
Die folgende "2" entspricht dem Argument.
1
, löschen Sie vom Zeilenanfang bis zur Cursorposition
--Wenn 2
, löschen Sie die Zeile mit dem CursorEs wird sein. del_line.py löscht die gesamte Zeile. Das letzte "K" bestimmt den Typ der CSI.
Wie im Wiki erläutert, hat "EL - In Zeile löschen" die Eigenschaft, die Cursorposition nicht zu ändern. Wenn Sie also Zeichen nach der gelöschten Zeile ausgeben möchten, müssen Sie den Cursor manuell an den Zeilenanfang bewegen. Es gibt. Dies kann mit "CHA - Cursor Horizontal Absolute" erreicht werden. Die Erklärung im Wiki lautet "Bewegt den Cursor in Spalte n (Standard 1)". Wenn Sie also den CSI-Code mit n auf 1 setzen oder weglassen, bewegt sich der Cursor in die erste Spalte (Zeilenanfang). Der CSI-Code lautet "CSI n G". Ersetzen Sie daher den CSI-Teil durch "\ 033 [", um "\ 033 [G" zu erhalten.
Ursprünglich möchte ich, dass die Zeichen so verschwinden, wie sie sind, aber in Python werden sie bei der Ausgabe von Zeichen einmal im Puffer gespeichert und zum Zeitpunkt des Zeilenumbruchs sofort ausgegeben. Selbst wenn Sie beabsichtigen, den CSI-Code zum Löschen von Zeichen im Quellcode auszugeben, wird er daher nicht auf dem tatsächlichen Bildschirm angezeigt. Daher gibt sys.stdout.flush ()
die im Puffer gespeicherte Zeichenfolge explizit aus und spiegelt sie auf dem Bildschirm wider.
Mit den oben genannten können die an die Konsole ausgegebenen Zeichen gelöscht werden.
print("abc\033[1D\033[K")
Ausgabeergebnis
ab
\ 033 [1D
bewegt den Cursor nach links und \ 033 [K
löscht sich vom Cursor bis zum Ende der Zeile.
--Wenn die Länge der fortlaufend anzuzeigenden Zeichenketten gleich ist oder die nachfolgende Ausgabe länger ist, können Sie sie überschreiben, indem Sie den Cursor einfach ohne den Befehl zum Löschen an den Zeilenanfang bewegen.
cat
usw. an die Konsole ausgeben.Recommended Posts