Wie kann ich mehrere Dinge gleichzeitig auf derselben Zeile drucken?

Lesezeit: 6 Minuten

Benutzeravatar von user697108
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

Benutzeravatar von multipleinterfaces
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.

def install_xxx():
    print("Installing XXX...      ", end="", flush=True)

install_xxx()
print("[DONE]")

Python 2-Lösung

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).

def install_xxx():
   print "Installing XXX...      ",

install_xxx()
print "[DONE]"

  • 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

boldniks Benutzeravatar
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

Benutzeravatar von Vadim Zin4uk
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


Benutzeravatar von ferostar
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.

Benutzeravatar von Sunfloro
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

Benutzeravatar von hyprnick
Hypnose

Keine der Antworten funktionierte für mich, da sie alle pausierten, bis eine neue Zeile gefunden wurde. Ich habe einen einfachen Helfer geschrieben:

def print_no_newline(string):
    import sys
    sys.stdout.write(string)
    sys.stdout.flush()

Um es zu testen:

import time
print_no_newline('hello ')
# Simulate a long task
time.sleep(2)
print('world')

“Hallo” wird zuerst ausgedruckt und vor dem Einschlafen auf den Bildschirm gespült. Danach können Sie den Standarddruck verwenden.

  • 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

Benutzeravatar von John Giotta
Johannes Giotta

sys.stdout.write druckt ohne Rücklauf

import sys
sys.stdout.write("installing xxx")
sys.stdout.write(".")

http://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines

1440230cookie-checkWie kann ich mehrere Dinge gleichzeitig auf derselben Zeile drucken?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy