2016-04-09 9 views
4

Mein Problem ist, dass ich in der Lage sein, vorherige gedruckte Zeile in Python-Konsole zu überschreiben/löschen. Diese Frage wird oft gefragt worden (Python - Remove and Replace Printed items zum Beispiel), aber mit dem gleichen Code, die ist (die Antwort markiert als richtig, für mich gar nichts ausdruckt):Überschreiben/Löschen der vorherigen Konsole Linie

for i in range(10): 
    print("Loading" + "." * i) 
    time.sleep(1) 
    sys.stdout.write("\033[F") # Cursor up one line 
    sys.stdout.write("\033[K") # Clear to the end of line 

ich den Ausgang (In Python IDLE):

Loading 
[F[KLoading. 
[F[KLoading.. 
[F[KLoading... 
[F[KLoading.... 
[F[KLoading..... 
[F[KLoading...... 
[F[KLoading....... 
[F[KLoading........ 
[F[KLoading......... 
[F[KLoading.......... 
[F[K 

Irgendwelche Ideen? Ich habe viel gegoogelt, nichts funktioniert wirklich. Es druckt nichts aus oder überschreibt nicht.

Wenn das hilft, ich Windows 8.1 und Python 3.51 ausführen. Das Ausführen des Codes über cmd hat keinen Einfluss auf irgendetwas.

Auch das Hinzufügen sys.stdout.flush() hilft nicht.

+0

Haben Sie überprüfen: http://stackoverflow.com/questions/27575929/ansi-escape-sequences-arent-printed-to-stdout-on-windows – Zorgmorduk

+0

Sequenzen wie '\ 033 [F 'muss vom Terminal unterstützt werden (se e 'termcap (3)'). AFAIK-Fenster hatten immer sehr schlechte Unterstützung für Terminal-Fähigkeiten –

Antwort

1

Sie müssen Ihr Programm über die Befehlszeile und nicht über IDLE ausführen.

Dann sollte diese Arbeit:

import sys 
import time 

for i in range(10): 
    sys.stdout.write("\r" + "Loading" + "." * i) 
    time.sleep(1) 
    sys.stdout.flush() 
print() 

Die \r zu Anfang der Zeile geht. Sie müssen also sicherstellen, dass die Zeichenkette, die Sie drucken, mindestens so lang wie die vorherige ist. Andernfalls sehen Sie Teile des vorherigen Ausdrucks.

1

Sie versuchen, ANSI-Escape-Sequenzen zu verwenden, um den Cursor zu bewegen. Windows unterstützt diese standardmäßig nicht. Um sie zu aktivieren, können Sie das colorama Modul mit pip install colorama in Ihrem Terminal, dann in Python installieren:

import colorama 
colorama.init() 

Wenn Sie auf Windows 10 aktualisiert haben, können Sie Unterstützung mit diesem stattdessen aktivieren:

import ctypes 
kernel32 = ctypes.windll.kernel32 
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7) 

(Quelle: https://stackoverflow.com/a/36760881/6379747)