2012-06-13 6 views
12

Ich brauche in einer Schleife (Python 3.x) über eine Zeile zu drucken. Ich suche diese Zeile schon in meinem Code:Python: print Wagenrücklauf verwenden und Komma nicht funktioniert

print('{0} imported\r'.format(tot),) 

Allerdings druckt es immer noch mehrere Zeilen, wenn durchgeschleift. Ich habe auch versucht,

sys.stdout.write('{0} imported\r'.format(tot)) 

aber dies wird nicht gedruckt etwas an die Konsole ...

Wer weiß, was mit diesem ist los?

+0

'sys.stdout.write()' funktioniert für mich .. Sie haben 'Import sys'. Versuchen Sie, die Ausgabe in derselben Zeile zu überlagern? – Levon

+0

Wenn Sie versuchen, den gleichen Effekt wie 'Drucktext zu bekommen,' von Python 2.x, müssen Sie das 'end' Argument verwenden, wie in' Druck (Text, Ende = '') '. Das Komma am Ende der Funktionsargumente hat keine Wirkung. – James

+0

Nicht sicher über "von 2.x". Die Zeile 'print (text, end = '')' gibt mir einen Syntaxfehler am '='. – rossmcm

Antwort

17

Im ersten Fall werden einige Systeme \r als Newline behandeln. Im zweiten Fall haben Sie nicht die Zeile flush. Versuchen Sie folgendes:

sys.stdout.write('{0} imported\r'.format(tot)) 
sys.stdout.flush() 

Spülen der Leitung auf allen Systemen auch nicht notwendig ist, da Levon mich erinnert - aber es ist generell eine gute Idee, wenn \r diese Art und Weise verwendet wird.

+0

@ kevlar1818 Wie ich im Kommentar erwähnt, die für mich (auch w/o Spülen des Ausgangspuffers) ... ungerade – Levon

+0

Die 'sys.stdout.flush() arbeitete' war, was ich brauchte. Vielen Dank! – kevlar1818

9

Wenn Sie Ihre letzte Zeile, die Sie \ r (Wagenrücklauf) und Ende = „“ hinzufügen, so dass Sie in der nächsten Zeile nicht gehen müssen überschrieben werden sollen.

values = range(0, 100) 
for i in values: 
    print ("\rComplete: ", i, "%", end="") 
print ("\rComplete: 100%") 
3

Ich ziehe die Lösung von Jan zu verwenden, aber auf diese Weise:

values = range(0, 101) 
for i in values: 
    print ("Complete: ", i, "%", end="\r") 
print ("\n\r", end="") 
+3

Ihre letzte Zeile ist Overkill. Es sollte nur 'print()' sein. –