Ответ 1
Вы также можете использовать возврат каретки:
sys.stdout.write("Download progress: %d%% \r" % (progress) )
sys.stdout.flush()
Я новичок в python и пишу некоторые скрипты для автоматизации загрузки файлов с FTP-серверов и т.д. Я хочу показать ход загрузки, но я хочу, чтобы он оставался в том же положении, например:
выход:
Загрузка файла FooFile.txt [47%]
Я пытаюсь избежать чего-то вроде этого:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
Как мне это сделать?
Дублировать: Как распечатать текущую строку в приложении командной строки?
Вы также можете использовать возврат каретки:
sys.stdout.write("Download progress: %d%% \r" % (progress) )
sys.stdout.flush()
Используйте библиотеку обработки терминалов, такую как curses module:
Модуль curses предоставляет интерфейс к библиотеке curses, стандарту de facto для портативной обработки дополнительных терминалов.
Мне нравится следующее:
print 'Downloading File FooFile.txt [%d%%]\r'%i,
Демо-версия:
import time
for i in range(100):
time.sleep(0.1)
print 'Downloading File FooFile.txt [%d%%]\r'%i,
print('Downloading File FooFile.txt [%d%%]\r'%i, end="")
Демо-версия:
import time
for i in range(100):
time.sleep(0.1)
print('Downloading File FooFile.txt [%d%%]\r'%i, end="")
Несколько раз напечатайте символ backspace \b
, а затем перезапишите старый номер с новым номером.
#kinda like the one above but better :P
from __future__ import print_function
from time import sleep
for i in range(101):
str1="Downloading File FooFile.txt [{}%]".format(i)
back="\b"*len(str1)
print(str1, end="")
sleep(0.1)
print(back, end="")
Для Python 3xx:
import time
for i in range(10):
time.sleep(0.2)
print ("\r Loading... {}".format(i)+str(i), end="")
Удобное решение для меня:
from __future__ import print_function
import sys
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end='\r')
sys.stdout.flush()
print("")
sys.stdout.flush
важно, в противном случае он становится очень неуклюжим, а также print("")
on for loop exit.
ОБНОВЛЕНИЕ. Как упоминалось в комментариях, print
также имеет аргумент flush
. Так будет работать и следующее:
from __future__ import print_function
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end='\r', flush=True)
print("")
x="A Sting {}"
for i in range(0,1000000):
y=list(x.format(i))
print(x.format(i),end="")
for j in range(0,len(y)):
print("\b",end="")