Jestem nowy w Pythonie i piszę kilka skryptów, aby zautomatyzować pobieranie plików z serwerów FTP itp. Chcę pokazać postęp pobierania, ale chcę, aby pozostał w tej samej pozycji, na przykład:
wynik:
Pobieranie pliku FooFile.txt [47%]
Próbuję uniknąć czegoś takiego:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
Jak mam się do tego zabrać?
Duplikat : Jak mogę drukować w bieżącym wierszu w aplikacji wiersza poleceń?
python
console-output
scottm
źródło
źródło
Odpowiedzi:
Możesz także użyć powrotu karetki:
źródło
\r
na początku wiersza i dodawać a,\x1b[K
aby usunąć poprzedni tekst.print("sample text", end='\r", flush=True)
Python 2
Podoba mi się:
Próbny:
Python 3
Próbny:
PyCharm Debugger Console z Pythonem 3
źródło
Użyj biblioteki obsługującej terminal, takiej jak moduł curses :
źródło
Wydrukuj
\b
kilkakrotnie znak cofnięcia , a następnie zastąp stary numer nowym numerem.źródło
print 'Downloading.... \r'
) Również nie usuwa poprzednich danych, ale zapobiega konieczności określania, jak daleko wstecz należy wykonać kopię zapasową.źródło
W przypadku Pythona 3xx:
źródło
Zgrabnym rozwiązaniem, które się sprawdziło, jest:
Jest
sys.stdout.flush
to ważne, w przeciwnym razie staje się naprawdę niezgrabne, aprint("")
wyjście z pętli jest również ważne.AKTUALIZACJA : Jak wspomniano w komentarzach,
print
ma równieżflush
argument. Więc poniższe również będą działać:źródło
flush=True
doprint
, więc nie ma potrzeby dodatkowegosys.stdout.flush()
wywołania.źródło