2017-03-17 4 views
5

In Python 3 können wir problemlos auf der gleichen Zeile mit dem folgenden Skript drucken. Ich benutze dies, um den Fortschritt meiner Schleife zu verstehen (wie viel Zeit übrig bleibt). Doch in jupyter tut es Arbeit (er druckt auf verschiedenen Linien)Drucken in der gleichen Zeile auf einem Jupyter-Notebook

import time 
for f in range(10): 
    print(f, end='\r', flush=True) 
    time.sleep(10) 

Es Arbeit% pprint drehen tut ziemlich ausdrucken, und ich versuchte, das gleiche mit sys.stdout.write(), aber auch da habe ich dieses Problem.

+0

Nein, ist das Ziel, ständig auf der gleichen Zeile drucken - als Hinweis auf die Fortschritte in der Schleife;) – Roelant

+0

ich Ihre Lösung sowohl in einem Terminal IPython Sitzung versucht, und in einem Jupyter Notebook (Python 3.6. 0 und 3.5.2), in beiden Fällen druckt es auf der gleichen Zeile und ersetzt, was vorher da war. Das scheint bei Jupyter/IPython kein generelles Problem zu sein. – Pit

Antwort

5

die Lösung dieses Problems ein wenig später nicht bekommen gefunden (beachten Sie, dass es nicht in PyCharm jupyter funktioniert, aber nur in die Browser-Implementierung).

from IPython.display import clear_output 

for f in range(10): 
    clear_output(wait=True) 
    print(f) 
    time.sleep(10) 
2

Der Teil "\ r" überschreibt die Zeile, wenn Sie das an die Zeile anhängen lassen. Ihre Version print(f, end='', flush=False) könnte funktionieren, aber ich habe gelesen, unter Python 3 müssen Sie sys.stdout.write() verwenden und am besten ist, wenn Sie auch Flush-Befehl hinzufügen.

import sys 
import time 

for f in range(10): 
    #delete "\r" to append instead of overwrite 
    sys.stdout.write("\r" + str(f)) 
    sys.stdout.flush() 
    time.sleep(10) 

Die stdout.flush ist auf einigen Systemen erforderlich, oder Sie werden einen beliebigen Ausgang

Verwandte Themen