Ich habe mich immer gefragt, wie Leute eine vorherige Zeile in einer Befehlszeile aktualisieren. Ein gutes Beispiel hierfür ist die Verwendung des Befehls wget unter Linux. Es wird eine Art ASCII-Ladeleiste erstellt, die folgendermaßen aussieht:
[======>] 37%
und natürlich bewegt sich die Ladeleiste und der Prozentsatz ändert sich, aber es wird keine neue Linie erstellt. Ich kann nicht herausfinden, wie das geht. Kann mich jemand in die richtige Richtung weisen?
command-line
The.Anti.9
quelle
quelle
Eine Möglichkeit, dies zu tun, besteht darin, die Textzeile wiederholt mit dem aktuellen Fortschritt zu aktualisieren. Zum Beispiel:
Beachten Sie, dass ich
sys.stdout.write
anstelle vonprint
(dies ist Python) verwendet habe, daprint
automatisch "\ r \ n" (Wagenrücklauf-Neuzeile) am Ende jeder Zeile gedruckt wird. Ich möchte nur den Wagenrücklauf, der den Cursor an den Zeilenanfang zurückbringt. Auch dasflush()
ist notwendig , da standardmäßigsys.stdout
nur die Ausgabe nach einem Newline spült (oder nach dem Puffer voll ist ).quelle
Das Geheimnis besteht darin, nur \ r anstelle von \ n oder \ r \ n am und der Zeile zu drucken.
\ r heißt Wagenrücklauf und bewegt den Cursor am Zeilenanfang
\ n heißt Zeilenvorschub und bewegt den Cursor in der nächsten Zeile der Konsole. Wenn Sie nur \ r verwenden, überschreiben Sie die zuvor geschriebene Zeile. Schreiben Sie also zuerst eine Zeile wie die folgende:
Fügen Sie dann für jedes Häkchen ein Zeichen hinzu
und so weiter. Sie können 10 Zeichen verwenden, die jeweils 10% darstellen. Wenn Sie nach Abschluss eine Meldung anzeigen möchten, vergessen Sie nicht, auch genügend weiße Zeichen hinzuzufügen, damit Sie die zuvor geschriebenen Gleichheitszeichen wie folgt überschreiben:
quelle
Unten ist meine Antwort, verwenden Sie die Windows API Consoles (Windows) , Codierung von C.
quelle
bInfo
definiert?PowerShell verfügt über ein Cmdlet "Write-Progress", mit dem eine Fortschrittsanzeige in der Konsole erstellt wird, die Sie während der Ausführung Ihres Skripts aktualisieren und ändern können.
quelle
Hier ist die Antwort auf Ihre Frage ... (Python)
quelle
Im Anschluss an Gregs Antwort finden Sie hier eine erweiterte Version seiner Funktion, mit der Sie mehrzeilige Nachrichten anzeigen können. Übergeben Sie einfach eine Liste oder ein Tupel der Zeichenfolgen, die Sie anzeigen / aktualisieren möchten.
Hinweis: Ich habe dies nur mit einem Linux-Terminal getestet, daher kann Ihr Kilometerstand auf Windows-basierten Systemen variieren.
quelle
\n
um\r\n
in Ihrem Skript, konnte aber immer noch nicht auf Windows bekommen arbeiten (Sie tun?). Ich habe←[A←[A
nach einigen Nachrichten, ich vermute, dass die'\x1b[A'
Sequenz nicht das tut, was sie solltecmd.exe
.Wenn Sie eine Skriptsprache verwenden, können Sie den Befehl "tput cup" verwenden, um dies zu erledigen ... PS Dies ist nur eine Linux / Unix-Sache, soweit ich weiß ...
quelle