Wie kann ich mehrere Dinge gleichzeitig auf derselben Zeile drucken?
Lesezeit: 6 Minuten
Benutzer697108
Ich möchte ein Skript ausführen, das im Grunde eine Ausgabe wie diese zeigt:
Installing XXX... [DONE]
Aktuell drucke ich Installing XXX... zuerst und dann drucke ich [DONE].
Wie kann ich stattdessen drucken Installing xxx... und [DONE] auf der gleichen Linie?
Für das spezielle Problem, eine neue Nachricht in dieselbe Zeile zu schreiben, ersetzen, was vorher da warfinden Sie unter Wie überschreibe ich den vorherigen Druck in stdout?. Am meisten Antworten hier haben die Frage so interpretiert, dass es darum geht, neuen Text zu schreiben am Ende von die aktuelle Zeile.
Für das Problem der Verwendung einer einzigen print Informationen zur gleichzeitigen Ausgabe mehrerer Dinge finden Sie unter Wie kann ich mehrere Dinge (fester Text und/oder variable Werte) auf einmal in derselben Zeile drucken?.
Mögliches Duplikat von Wie verhindere ich, dass der Python-Druck Zeilenumbrüche oder Leerzeichen hinzufügt?
– Cees Timmermann
9. Dezember 2016 um 2:21 Uhr
Antworten auf diese Frage erwähnen nicht, dass Sie manchmal die Leitung löschen möchten, siehe: stackoverflow.com/questions/45263205
– Ideengeber42
23. Juli 2017 um 9:44 Uhr
mehrere Schnittstellen
Python 3-Lösung
Die print() Funktion akzeptiert ein end Parameter, der standardmäßig auf \n (Neue Zeile). Wenn Sie es auf eine leere Zeichenfolge setzen, wird verhindert, dass am Ende der Zeile eine neue Zeile ausgegeben wird.
Ein Komma am Ende setzen print() Linie verhindert print() keine neue Zeile ausgeben (beachten Sie, dass am Ende der Ausgabe ein zusätzliches Leerzeichen steht).
Es funktioniert perfekt. Hatte bisher nur Standardlösungen gesehen. Wirklich gut, das zu wissen.
– Prometheus
8. Januar 2015 um 7:59 Uhr
Dies funktioniert nicht, wenn Sie sowohl Drucke als auch eine zeitaufwändige Aktion dazwischen haben (alle in derselben Funktion / Einrückungsebene). Vor Beginn der Aktion erfolgt überhaupt keine Ausgabe und nach Beendigung erscheint die Ausgabe als Ganzes
– Paddre
20. Februar 2015 um 15:08 Uhr
Dies ist wahrscheinlich eher eine Funktion der vom Betriebssystem für den gesamten Prozess durchgeführten Ausgabepufferung, was kein Python-spezifisches Problem ist. Siehe stackoverflow.com/questions/107705 für eine Python-spezifische Problemumgehung.
– mehrere Schnittstellen
20. Februar 2015 um 16:48 Uhr
Ohne Zeilenumbruch möchten Sie wahrscheinlich den Puffer explizit leeren. Verwenden print("...", end="", flush=True) in Python 3, in Python 2 fügen Sie a hinzu sys.stdout.flush() Anruf.
– Martijn Pieters ♦
3. November 2016 um 12:53 Uhr
In Python 3.x möchten Sie am Ende ein “\r” hinzufügen, um die gedruckte Zeile VS zu ersetzen, die an das Ende angehängt wird print("Progress: {}%".format(var), end="\r", flush=True)
– John
6. Januar 2018 um 22:42 Uhr
Fettnik
Das kannst du einfach verwenden:
print 'something',
...
print ' else',
und die Ausgabe wird sein
something else
keine Notwendigkeit, durch zu übertreiben import sys. Achten Sie auf das Komma-Symbol am Ende.
Python 3+ print("some string", end=""); um die Newline-Einfügung am Ende zu entfernen. Lesen Sie mehr von help(print);
Beachten Sie, dass bei dieser Methode zwei Leerzeichen vorhanden sind
– Ethanjyx
12. November 2013 um 3:20 Uhr
Dies ist die einfachste und effizienteste Antwort.
– Gixxer
22. Mai 2015 um 4:45 Uhr
Dies funktioniert nicht, wenn Argumente von print in Klammern stehen. Das funktioniert: aber das funktioniert nicht
– Mayank Jaiswal
27. November 2015 um 7:46 Uhr
@MayankJaiswal Das funktioniert mit den Eltern. print(‘Hallo’),
– Handschuh
6. Februar 2016 um 22:39 Uhr
print Die Funktion hat in Python 2 VS 3 eine etwas andere Syntax.
– Fettnik
7. Februar 2016 um 4:24 Uhr
Wadim Zin4uk
Sie sollten die Rücktaste verwenden ‘\r‘ oder (‘\x08‘) Zeichen, um zur vorherigen Position in der Konsolenausgabe zurückzukehren
Python 2+:
import time
import sys
def backspace(n):
sys.stdout.write((b'\x08' * n).decode()) # use \x08 char to go back
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
sys.stdout.write(s) # just print
sys.stdout.flush() # needed for flush when using \x08
backspace(len(s)) # back n chars
time.sleep(0.2) # sleep for 200ms
Python3:
import time
def backline():
print('\r', end='') # use '\r' to go back
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
print(s, end='') # just print and flush
backline() # back to the beginning of line
time.sleep(0.2) # sleep for 200ms
Dieser Code zählt in einer Zeile von 0 % bis 100 %. Der Endwert wird sein:
> python test.py
100%
Zusätzliche Informationen zu Flush in diesem Fall hier: Warum verhalten sich Python-Druckanweisungen, die ‘end=’-Argumente enthalten, in While-Schleifen anders?
Zur Verdeutlichung sieht es so aus, als sei der auskommentierte Code in diesem Beispiel für Python 2 und die nicht auskommentierten Zeilen für Python 3.
– Schildkröten sind süß
9. März 2015 um 23:05 Uhr
Beide Zeilen funktionieren in Python 3 einwandfrei. Wenn Sie ‘\x08′ als Backspace verwenden, müssen Sie den Ausgabestrom leeren – print((b’\x08’ * n).decode(), end=”, flush= WAHR)
– Wadim Zin4uk
10. März 2015 um 9:43 Uhr
Der Wagenrücklauf ‘\r’ geht zurück zum Anfang der Zeile, also ist das ‘* n’ unnötig
– bjnortier
8. Mai 2017 um 8:02 Uhr
ferostar
Verwenden sys.stdout.write('Installing XXX... ') und sys.stdout.write('Done'). Auf diese Weise müssen Sie die neue Zeile von Hand mit 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.
Sunfloro
Am einfachsten:
Python 3
print('\r' + 'something to be override', end='')
Es bedeutet, dass der Cursor zum Anfang zurückkehrt, dann etwas gedruckt wird und in derselben Zeile endet. Wenn es sich in einer Schleife befindet, beginnt es an derselben Stelle zu drucken, an der es beginnt.
Cool! Funktioniert auch unter Windows.
– Shital Shah
13. Februar 2019 um 11:59 Uhr
Danke das funktioniert gut für mich! ich denke, dass print(’something to be override’, end=‘\r’) ist aber einfacher.
– Tropilio
10. April 2019 um 9:00 Uhr
Hypnose
Keine der Antworten funktionierte für mich, da sie alle pausierten, bis eine neue Zeile gefunden wurde. Ich habe einen einfachen Helfer geschrieben:
Mögliches Duplikat von Wie verhindere ich, dass der Python-Druck Zeilenumbrüche oder Leerzeichen hinzufügt?
– Cees Timmermann
9. Dezember 2016 um 2:21 Uhr
Antworten auf diese Frage erwähnen nicht, dass Sie manchmal die Leitung löschen möchten, siehe: stackoverflow.com/questions/45263205
– Ideengeber42
23. Juli 2017 um 9:44 Uhr