Ich möchte ein Skript ausführen, das im Grunde eine Ausgabe wie diese zeigt:
Installing XXX... [DONE]
Derzeit drucke ich Installing XXX...
zuerst und dann drucke ich [DONE]
.
Jetzt möchte ich jedoch drucken Installing xxx...
und [DONE]
in derselben Zeile.
Irgendwelche Ideen?
python
printing
stdout
line-breaks
user697108
quelle
quelle
Antworten:
Sie können die
print
Anweisung verwenden, um dies ohne Import zu tunsys
.Das Komma am Ende der
print
Zeile verhindertprint
, dass eine neue Zeile ausgegeben wird (Sie sollten beachten, dass am Ende der Ausgabe ein zusätzliches Leerzeichen vorhanden ist).Die Python 3-Lösung
Da das oben Genannte in Python 3 nicht funktioniert, können Sie dies stattdessen tun (erneut ohne Import
sys
):Die Druckfunktion akzeptiert einen
end
Parameter, der standardmäßig verwendet wird"\n"
. Wenn Sie eine leere Zeichenfolge festlegen, wird verhindert, dass am Ende der Zeile eine neue Zeile ausgegeben wird.quelle
print("...", end="", flush=True)
in Python 3, in Python 2 fügen Sie einensys.stdout.flush()
Anruf.print("Progress: {}%".format(var), end="\r", flush=True)
Sie können dies einfach verwenden:
und die Ausgabe wird sein
keine Notwendigkeit zu übertreiben
import sys
. Achten Sie auf das Kommasymbol am Ende.Python 3+
print("some string", end="");
zum Entfernen des Zeilenumbruchs am Ende. Lesen Sie mehr vonhelp(print);
quelle
print
Funktion hat etwas andere Syntax in Python 2 VS 3.Sie sollten die Rücktaste ' \ r ' oder (' \ x08 ') char verwenden, um zur vorherigen Position in der Konsolenausgabe zurückzukehren
Python 2+:
Python 3:
Dieser Code zählt in einer Zeile von 0% bis 100%. Der endgültige Wert ist:
Zusätzliche Informationen zum Flush in diesem Fall hier: Warum verhalten sich Python-Druckanweisungen, die 'end =' - Argumente enthalten, in while-Schleifen anders?
quelle
Verwenden Sie
sys.stdout.write('Installing XXX... ')
undsys.stdout.write('Done')
. Auf diese Weise müssen Sie die neue Zeile von Hand hinzufügen,"\n"
wenn Sie die Druckfunktion neu erstellen möchten. Ich denke, dass es unnötig sein könnte, Flüche nur dafür zu verwenden.quelle
__future__
Importe oder ähnliches angewiesen zu sein .Keine der Antworten funktionierte für mich, da alle pausierten, bis eine neue Zeile gefunden wurde. Ich habe einen einfachen Helfer geschrieben:
Um es zu testen:
"Hallo" wird zuerst ausgedruckt und vor dem Schlafengehen auf den Bildschirm gespült. Danach können Sie den Standarddruck verwenden.
quelle
sys.stdout.write
wird ohne Rücktransport gedruckthttp://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines
quelle
Am einfachsten:
Python 3
Dies bedeutet, dass der Cursor auf den Anfang zurückgesetzt wird, dann etwas gedruckt wird und in derselben Zeile endet. In einer Schleife wird der Druck an derselben Stelle gestartet, an der er gestartet wurde.
quelle
print(’something to be override’, end=‘\r’)
ist jedoch einfacher.In diesem einfachen Beispiel wird 1-10 in derselben Zeile gedruckt.
quelle
Drucken hat ein optionales
end
Argument, das am Ende gedruckt wird. Der Standardwert ist eine neue Zeile, Sie können sie jedoch in eine leere Zeichenfolge ändern. z.Bprint("hello world!", end="")
quelle
print 'something',
. Das Komma am Ende verhindert das Hinzufügen einer neuen Zeile.Wenn Sie die vorherige Zeile überschreiben möchten (anstatt sie kontinuierlich zu ergänzen), können Sie sie am Ende der print-Anweisung
\r
mit kombinierenprint(),
. Beispielsweise,zählt 0 bis 9 und ersetzt die alte Nummer in der Konsole. Das
"...DONE!"
wird in derselben Zeile wie der letzte Zähler gedruckt, 9.In Ihrem Fall für das OP würde dies der Konsole ermöglichen, den prozentualen Abschluss der Installation als "Fortschrittsbalken" anzuzeigen, in dem Sie eine Anfangs- und Endzeichenposition definieren und die Markierungen dazwischen aktualisieren können.
quelle
Hier eine 2.7-kompatible Version, abgeleitet von der 3.0-Version von @ Vadim-Zin4uk:
Python 2
Im Übrigen sieht die mitgelieferte 3.0-Lösung etwas aufgebläht aus. Zum Beispiel verwendet die Rücktaste das Integer-Argument nicht und könnte wahrscheinlich ganz wegfallen.
Python 3
Beide wurden getestet und funktionieren.
quelle
Dies ist ein sehr alter Thread, aber hier ist eine sehr gründliche Antwort und ein Beispielcode.
\r
ist die Zeichenfolgendarstellung von Carriage Return aus dem ASCII-Zeichensatz. Es ist dasselbe wie oktal015
[chr(0o15)
] oder hexadezimal0d
[chr(0x0d)
] oder dezimal13
[chr(13)
]. Sieheman ascii
für eine langweilige Lektüre. Es (\r
) ist eine ziemlich tragbare Darstellung und für die Leute leicht zu lesen. Es bedeutet ganz einfach, den Wagen auf der Schreibmaschine ganz zum Start zurückzubewegen, ohne das Papier vorzuschieben. Es ist derCR
Teil vonCRLF
dem bedeutet Carriage Return und Line Feed .print()
ist eine Funktion in Python 3. In Python 2 (jede Version, die Sie verwenden möchten)print
kann sie durch Importieren ihrer Definition aus dem__future__
Modul in eine Funktion gezwungen werden. Der Vorteil derprint
Funktion besteht darin, dass Sie angeben können, was am Ende gedruckt werden soll, und das Standardverhalten\n
zum Drucken einer neuen Zeile am Ende jedesprint()
Aufrufs überschreiben .sys.stdout.flush
Weist Python an, die Ausgabe der Standardausgabe zu leeren , mit der Sie die Ausgabe senden,print()
sofern Sie nichts anderes angeben. Sie können das gleiche Verhalten auch erzielen,python -u
indem Sie die Umgebungsvariable ausführen oderPYTHONUNBUFFERED=1
festlegenimport sys
und dabei diesys.stdout.flush()
Aufrufe und überspringen . Der Betrag, den Sie dadurch gewinnen, ist fast genau Null und nicht sehr einfach zu debuggen, wenn Sie bequemerweise vergessen, dass Sie diesen Schritt ausführen müssen, bevor sich Ihre Anwendung ordnungsgemäß verhält.Und eine Probe. Beachten Sie, dass dies in Python 2 oder 3 perfekt läuft.
quelle
print () hat einen eingebauten Parameter "end", der standardmäßig auf "\ n" gesetzt ist. Wenn Sie print ("This is America") aufrufen, wird print ("This is America", end = "\ n") aufgerufen. Eine einfache Möglichkeit besteht darin, print aufzurufen ("This is America", end = "").
quelle
Nur für den Fall, dass Sie die Werte in einem Array vorgespeichert haben, können Sie sie im folgenden Format aufrufen:
quelle
Python fügt Newline als Druckende an. Verwenden Sie end = '' für python3 als Druckmethode, um ein Leerzeichen anstelle einer neuen Zeile anzuhängen. Verwenden Sie für Python2 das Komma am Ende der Druckanweisung.
quelle
Fand diesen Quora-Beitrag mit diesem Beispiel, das für mich funktioniert hat (Python 3), das näher an dem war, wofür ich es brauchte (dh die gesamte vorherige Zeile löschen).
Das Beispiel, das sie liefern:
Verwenden Sie zum Drucken in derselben Zeile, wie von anderen vorgeschlagen, einfach
end=""
quelle
Ich habe diese Lösung gefunden und sie funktioniert unter Python 2.7
quelle
print
ist eine falsche Syntax für Python 2.7 und der Code funktioniert auch bei korrekter Syntax nicht.