@ lenooh удовлетворил мой запрос. Я обнаружил эту статью во время поиска «python suppress newline». Я использую IDLE3 на Raspberry Pi для разработки Python 3.2 для PuTTY. Я хотел создать индикатор выполнения в командной строке PuTTY. Я не хотел, чтобы страница прокручивалась. Я хотел, чтобы горизонтальная линия убедила пользователя в том, что программа не остановилась и не была отправлена на ланч по бесконечной бесконечной петле - как просьба «оставь меня, у меня все хорошо, но это может занять некоторое время. интерактивное сообщение - как индикатор выполнения в тексте.
print('Skimming for', search_string, '\b! .001', end='')
инициализирует сообщение, подготавливая следующую запись экрана, которая напечатает три пробела как ⌫⌫⌫ rubout, а затем период, стирая «001» и расширяя линию периодов. После того, как search_string
попугает пользовательский ввод, \b!
обрезает восклицательный знак моего текста search_string
, возвращая его через пробел, который print()
в противном случае вызывает, правильно расставляя знаки препинания. Затем следует пробел и первая «точка» «индикатора выполнения», который я моделирую. Излишне, сообщение также тогда заполняется номером страницы (отформатированный в длину три с ведущими нулями), чтобы заметить от пользователя, что прогресс обрабатывается и который также будет отражать количество периодов, которые мы позже построим к правый.
import sys
page=1
search_string=input('Search for?',)
print('Skimming for', search_string, '\b! .001', end='')
sys.stdout.flush() # the print function with an end='' won't print unless forced
while page:
# some stuff…
# search, scrub, and build bulk output list[], count items,
# set done flag True
page=page+1 #done flag set in 'some_stuff'
sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meat
sys.stdout.flush()
if done: #( flag alternative to break, exit or quit)
print('\nSorting', item_count, 'items')
page=0 # exits the 'while page' loop
list.sort()
for item_count in range(0, items)
print(list[item_count])
#print footers here
if not (len(list)==items):
print('#error_handler')
Мясо индикатора выполнения находится в строке sys.stdout.write('\b\b\b.'+format(page, '03'))
. Сначала, чтобы стереть влево, он создает резервную копию курсора над тремя числовыми символами с помощью '\ b \ b \ b' в виде ⌫⌫⌫ Rubout и сбрасывает новый период, чтобы добавить к длине индикатора выполнения. Затем он записывает три цифры страницы, до которой он дошел. Поскольку sys.stdout.write()
ожидает закрытия полного буфера или выходного канала, sys.stdout.flush()
вызывает немедленную запись. sys.stdout.flush()
встроен в конец print()
, который обойден с print(txt, end='' )
. Затем код выполняет циклические операции, требующие больших затрат времени, пока ничего не печатает, пока не вернется сюда, чтобы стереть три цифры назад, добавить точку и снова написать три цифры, с приращением.
Три цифры, вытертые и переписанные, ни в коем случае не являются необходимыми - это просто процветание, которое иллюстрирует sys.stdout.write()
против print()
. Вы также можете легко заштриховать точку и забыть о трех причудливых обратных символах backslash-b ((конечно, не записывая и отформатированное количество страниц), просто печатая строку периода длиннее на единицу каждый раз - без пробелов и новых строк, используя только sys.stdout.write('.'); sys.stdout.flush()
пара.
Обратите внимание, что оболочка Python Raspberry Pi IDLE3 не обрабатывает символ возврата на обратную сторону как символ out, но вместо этого печатает пробел, создавая вместо этого видимый список дробей.
- (o = 8> wiz