So implementieren Sie eine Statusleiste wie folgt:
[========== ] 45%
[================ ] 60%
[==========================] 100%
Ich möchte, dass dies in stdout ausgedruckt wird und weiterhin aktualisiert wird, nicht in einer anderen Zeile gedruckt wird. Wie macht man das?
Antworten:
Es ist ein Python - Modul , dass Sie von bekommen PyPI genannt ,
progressbar
dass Geräte eine solche Funktionalität. Wenn es Ihnen nichts ausmacht, eine Abhängigkeit hinzuzufügen, ist dies eine gute Lösung. Andernfalls gehen Sie mit einer der anderen Antworten.Ein einfaches Beispiel für die Verwendung:
Um es zu installieren, können Sie verwenden
easy_install progressbar
, oderpip install progressbar
wenn Sie pip bevorzugen.quelle
bar.start()
?bar.start()
sudo -H pip install progressbar2
.Das
'\r'
Zeichen (Wagenrücklauf) setzt den Cursor auf den Zeilenanfang zurück und ermöglicht es Ihnen, über das zu schreiben, was zuvor in der Zeile stand.Ich bin nicht 100% sicher, ob dies auf allen Systemen vollständig portierbar ist, aber es funktioniert zumindest unter Linux und OSX.
quelle
n=21
, ersetzenrange(21)
durchrange(n)
, dannj = (i + 1) / n
innerhalb der Schleife hinzufügen und diewrite
Anweisung durch diese geringfügige Modifikation ersetzen :sys.stdout.write("[%-20s] %d%%" % ('='*int(20*j), 100*j))
. Jetzt müssen Sie nur nochn=21
vor der Schleife (wahrscheinlichern=len(iterable)
) Änderungen vornehmen und dann über das iterierbare Objekt aufzählen. Ich habe diese Änderung empfohlen, aber sie wurde abgelehnt. anscheinend weicht die Funktionalität "von der ursprünglichen Absicht des Beitrags ab".sys.stdout.write("[{:{}}] {:.1f}%".format("="*i, n-1, (100/(n-1)*i)))
Ich fand nützliche Bibliothek tqdm ( https://github.com/tqdm/tqdm/ , zuvor: https://github.com/noamraph/tqdm ). Es schätzt automatisch die Fertigstellungszeit und kann als Iterator verwendet werden.
Verwendung:
Ergebnisse in:
tqdm
kann jedes iterable umschließen.quelle
Sie können verwenden
\r
( Wagenrücklauf ). Demo:quelle
total
als10
, dann erhalten Sie eine FehlermeldungZeroDivisionError: long division or modulo by zero
Hier können Sie folgenden Code als Funktion verwenden:
Bei Verwendung von .format:
quelle
] percent * 100 %
Aufgrund der obigen Antworten und anderer ähnlicher Fragen zum CLI-Fortschrittsbalken habe ich eine allgemeine Antwort auf alle Fragen erhalten. Überprüfen Sie es unter https://stackoverflow.com/a/15860757/2254146
Hier ist eine Kopie der Funktion, die jedoch an Ihren Stil angepasst wurde:
Sieht aus wie
Prozent: [===================] 99,0%
quelle
Wenn Sie eine Befehlszeilenschnittstelle entwickeln, empfehle ich Ihnen, einen Blick darauf zu werfen,
click
was sehr schön ist:Hier die Ausgabe, die Sie erhalten:
quelle
Weitere Verbesserung durch Verwendung einer Funktion als:
Aufrufbeispiel:
Ausgabe:
quelle
Ich bin heute auf diesen Thread gestoßen, nachdem ich diese Lösung von Mark Rushakoff ausprobiert hatte
Ich kann sagen, dass dies auf W7-64 mit Python 3.4.3 64-Bit gut funktioniert, aber nur in der nativen Konsole. Bei Verwendung der integrierten Konsole von spyder 3.0.0dev sind die Zeilenumbrüche jedoch weiterhin vorhanden. Da ich einige Zeit gebraucht habe, um dies herauszufinden, möchte ich diese Beobachtung hier berichten.
quelle
Aufbauend auf einigen der Antworten hier und anderswo habe ich diese einfache Funktion geschrieben, die einen Fortschrittsbalken und die verstrichene / geschätzte verbleibende Zeit anzeigt. Sollte auf den meisten Unix-basierten Computern funktionieren.
quelle
Dies ist ein recht einfacher Ansatz, der mit jeder Schleife verwendet werden kann.
quelle
Am einfachsten ist es noch
Der Schlüssel ist, den Integer-Typ in einen String zu konvertieren.
quelle
Wie in Mark Rushakoffs Lösung beschrieben , können Sie das Wagenrücklaufzeichen ausgeben
sys.stdout.write('\r')
, um den Cursor auf den Zeilenanfang zurückzusetzen. Um diese Lösung zu verallgemeinern und gleichzeitig die f-Strings von Python 3 zu implementieren , können Sie sie verwendenquelle
Versuchen Sie PyProg. PyProg ist eine Open-Source-Bibliothek für Python, mit der Sie super anpassbare Fortschrittsanzeigen und Balken erstellen können.
Es ist derzeit in Version 1.0.2; Es wird auf Github gehostet und ist auf PyPI verfügbar (Links unten). Es ist kompatibel mit Python 3 & 2 und kann auch mit Qt Console verwendet werden.
Es ist wirklich einfach zu bedienen. Der folgende Code:
produziert genau das, was Sie wollen (sogar die Stablänge!):
Weitere Optionen zum Anpassen des Fortschrittsbalkens finden Sie auf der Github-Seite dieser Website.
Ich habe PyProg tatsächlich gemacht, weil ich eine einfache, aber super anpassbare Fortschrittsbalkenbibliothek brauchte. Sie können es einfach installieren mit :
pip install pyprog
.PyProg Github: https://github.com/Bill13579/pyprog
PyPI: https://pypi.python.org/pypi/pyprog/
quelle
Mit der Antwort von @ Mark-Rushakoff habe ich einen einfacheren Ansatz erarbeitet, ohne die sys-Bibliothek aufrufen zu müssen. Es funktioniert mit Python 3. Getestet in Windows:
quelle
print
handelt es sich um einen Thin Wrapper, der die Eingabe formatiert und die Schreibfunktion eines bestimmten Objekts aufruft. Standardmäßig ist dieses Objektsys.stdout
.Hier ist etwas, das ich mit der Lösung von @ Mark-Rushakoff gemacht habe. Adaptive Anpassung an die Klemmenbreite.
quelle