2017-03-17 31 views
5

W pythonie 3 możemy z łatwością wydrukować na tej samej linii przy użyciu następującego skryptu. Używam tego, aby zrozumieć postęp mojej pętli (ile czasu pozostało). Jednak w jupyter to robi praca (drukuje na różnych liniach)Drukowanie na tej samej linii na notebooku jupyter

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

nie robi praca, aby włączyć całkiem wydrukować% pprint i próbowałem to samo z sys.stdout.write(), ale też nie mam ten przypadek.

+0

Nie, celem jest ciągłe drukowanie na tej samej linii - jako wskaźnik postępu wewnątrz pętli;) – Roelant

+0

Próbowałem swoje rozwiązanie zarówno w końcowej sesji ipython iw zeszycie Jupyter (Python 3.6. Odpowiednio 0 i 3.5.2), w obu przypadkach drukuje na tej samej linii, zastępując to, co było przed nią. Tak więc nie wydaje się to problemem ogólnym w przypadku Jupyter/IPython. – Pit

Odpowiedz

5

Znaleziono rozwiązanie tego nieco później (zauważ, że to nie działa w pycharm jupyter, ale tylko w implementacja przeglądarki).

from IPython.display import clear_output 

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

Część "\ r" zastępuje linię, jeśli zostawisz ją dołączoną do linii. Twoja wersja print(f, end='', flush=False) może działać, ale czytałem w Pythonie 3, musisz użyć sys.stdout.write() i najlepiej, jeśli dodasz również polecenie flush.

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) 

STDOUT.flush jest wymagana w niektórych systemach, albo nie dostanie dowolnego wyjścia