python: печать с использованием возврата каретки и запятой не работает

Мне нужно печатать по одной строке в цикле (Python 3.x). Оглядываясь на SO уже, я поместил эту строку в свой код:

print('{0} imported\r'.format(tot),)

Тем не менее, он по-прежнему печатает несколько строк при циклическом прохождении. я тоже пробовал

sys.stdout.write('{0} imported\r'.format(tot))

но это не выводит ничего на консоль...

Кто-нибудь знает, что с этим происходит?


person kevlar1818    schedule 13.06.2012    source источник
comment
sys.stdout.write() у меня работает.. у вас import sys. Вы пытаетесь наложить вывод на одну строку?   -  person Levon    schedule 13.06.2012
comment
Если вы пытаетесь получить тот же эффект, что и print text, из python 2.x, вам нужно использовать аргумент end, как в print(text, end=''). Запятая в конце аргументов функции не имеет значения.   -  person James    schedule 13.06.2012
comment
Не уверен насчет версии 2.x. Строка print(text, end='') дает мне синтаксическую ошибку в =.   -  person rossmcm    schedule 09.02.2018


Ответы (3)


В первом случае некоторые системы будут рассматривать \r как новую строку. Во втором случае вы не flush линию. Попробуй это:

sys.stdout.write('{0} imported\r'.format(tot))
sys.stdout.flush()

Левон напоминает мне, что промывка линии не требуется во всех системах, но в целом это хорошая идея при использовании \r таким образом.

person senderle    schedule 13.06.2012
comment
@ kevlar1818 Как я уже упоминал в комментарии, это сработало для меня (даже без очистки выходного буфера) ... странно - person Levon; 13.06.2012
comment
sys.stdout.flush() было то, что мне было нужно. Спасибо! - person kevlar1818; 13.06.2012

Если вы хотите перезаписать последнюю строку, вам нужно добавить \r (возврат символа) и end="", чтобы не переходить на следующую строку.

values = range(0, 100)
for i in values:
    print ("\rComplete: ", i, "%", end="")
print ("\rComplete: 100%")
person Joris    schedule 07.01.2014

Я предпочитаю использовать решение Яна, но таким образом:

values = range(0, 101)
for i in values:
  print ("Complete: ", i, "%", end="\r")
print ()
person Southernal    schedule 16.08.2015