@lenooh hat meine Anfrage erfüllt. Ich habe diesen Artikel bei der Suche nach "Python Suppress Newline" entdeckt. Ich verwende IDLE3 auf Raspberry Pi, um Python 3.2 für PuTTY zu entwickeln. Ich wollte einen Fortschrittsbalken in der PuTTY-Befehlszeile erstellen. Ich wollte nicht, dass die Seite wegrollt. Ich wollte eine horizontale Linie, um dem Benutzer zu versichern, dass das Programm nicht zum Stillstand gekommen ist und nicht in einer lustigen Endlosschleife zum Mittagessen geschickt wurde - als Bitte, mich zu verlassen, geht es mir gut, aber das kann einige Zeit dauern. ' interaktive Nachricht - wie ein Fortschrittsbalken im Text.
Der print('Skimming for', search_string, '\b! .001', end='')
initialisiert die Nachricht, indem er sich auf den nächsten Bildschirmschreibvorgang vorbereitet, bei dem drei Leerzeichen als ⌫⌫⌫ Rubout und dann ein Punkt gedruckt werden, wobei '001' gelöscht und die Periodenzeile erweitert wird. Nach der search_string
Benutzereingabe von Papageien \b!
schneidet das Ausrufezeichen meines search_string
Textes zu, um über das Leerzeichen zu gelangen, das print()
sonst erzwungen wird, und platziert die Interpunktion richtig. Darauf folgt ein Leerzeichen und der erste 'Punkt' des 'Fortschrittsbalkens', den ich simuliere. Unnötig ist, dass die Nachricht dann auch mit der Seitenzahl (formatiert auf eine Länge von drei mit führenden Nullen) versehen wird, um den Benutzer darauf aufmerksam zu machen, dass der Fortschritt verarbeitet wird und dass dies auch die Anzahl der Perioden widerspiegelt, die wir später für die erstellen werden Recht.
import sys
page=1
search_string=input('Search for?',)
print('Skimming for', search_string, '\b! .001', end='')
sys.stdout.flush() # the print function with an end='' won't print unless forced
while page:
# some stuff…
# search, scrub, and build bulk output list[], count items,
# set done flag True
page=page+1 #done flag set in 'some_stuff'
sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meat
sys.stdout.flush()
if done: #( flag alternative to break, exit or quit)
print('\nSorting', item_count, 'items')
page=0 # exits the 'while page' loop
list.sort()
for item_count in range(0, items)
print(list[item_count])
#print footers here
if not (len(list)==items):
print('#error_handler')
Das Progress Bar Fleisch ist in der sys.stdout.write('\b\b\b.'+format(page, '03'))
Linie. Zum Löschen nach links wird zunächst der Cursor über den drei numerischen Zeichen mit dem '\ b \ b \ b' als ⌫⌫⌫ Rubout gesichert und ein neuer Punkt gelöscht, um die Länge des Fortschrittsbalkens zu erhöhen. Dann schreibt es drei Ziffern der Seite, auf die es bisher fortgeschritten ist. Da darauf sys.stdout.write()
gewartet wird, dass ein voller Puffer oder der Ausgangskanal geschlossen wird, sys.stdout.flush()
wird das sofortige Schreiben erzwungen. sys.stdout.flush()
ist eingebaut, in dessen Ende mit print()
umgangen wird print(txt, end='' )
. Dann durchläuft der Code seine alltäglichen zeitintensiven Operationen, während er nichts mehr druckt, bis er hierher zurückkehrt, um drei Ziffern zurückzuwischen, einen Punkt hinzuzufügen und erneut drei Ziffern zu schreiben, inkrementiert.
Die drei Ziffern, die gelöscht und neu geschrieben wurden, sind keineswegs notwendig - es ist nur ein Schnörkel, der beispielhaft für sys.stdout.write()
Versus steht print()
. Sie können genauso gut mit einem Punkt beginnen und die drei ausgefallenen Backslash-b-Backspaces vergessen (natürlich auch keine formatierten Seitenzahlen schreiben), indem Sie den Periodenbalken jedes Mal um eins länger durchdrucken - ohne Leerzeichen oder Zeilenumbrüche, indem Sie nur den Punkt verwenden sys.stdout.write('.'); sys.stdout.flush()
Paar.
Bitte beachten Sie, dass die Raspberry Pi IDLE3 Python-Shell die Rücktaste nicht als ⌫ Rubout berücksichtigt, sondern stattdessen ein Leerzeichen druckt und stattdessen eine scheinbare Liste von Brüchen erstellt.
- (o = 8> wiz