2014-01-16 3 views
3

Я пытаюсь напечатать строки, которые всегда заменить один передне может заменить печататься линию с г

print "\r Getting hosts %i" % int(100/count*len(lines)) 

Это должно привести к Gettings hosts 0 - 100 % в одной динамической линии, но она всегда будет печатать новую строку вместо.

+0

Что вы думаете '\ r'? – devnull

+0

Возвращает курсор к началу – Saphire

+0

Это делает это, _precisely_. – devnull

ответ

2

print неявно добавить новую строку после строки.

Чтобы предотвратить это, в Python 2.x добавьте , в конце инструкции печати.

print "\r Getting hosts %i" % int(100/count*len(lines)), 

В Python 3.x, используйте следующий добавить end='' аргумент:

print("\r Getting hosts %i" % int(100/count*len(lines)), end='') 

Или использовать sys.stdout.write (работает как в Python 2.x, Python 3.x):

import sys 

.... 

sys.stdout.write("\r Getting hosts %i" % int(100/count*len(lines))) 

Стандартный выход обычно буферизирован. Вам может понадобиться очищать поток каждый раз, когда вы пишете.

sys.stdout.flush() 

100/count*len(lines) кажется странным. Может, ты имеешь в виду следующее?

100 * count/len(lines) 
+0

Для полноты; с функцией печати Python 3 он работает следующим образом: 'print ('\ r some text', end = '')' – poke

+0

@poke, Спасибо за комментарий. Я добавил это к ответу. – falsetru

0

использование sys.stdout.flush() для удаления линии

sys.stdout.write("\r Getting hosts %i" % int(100/count*len(lines))) # or print >> sys.stdout, "\r Getting hosts %i" % int(100/count*len(lines)) 
sys.stdout.flush() 

например,

for i in range(100): 
    time.sleep(0.1) 
    sys.stdout.write("\r Getting hosts %i" % i) 
    sys.stdout.flush() 
Смежные вопросы