@lenooh atendeu minha pergunta. Eu descobri este artigo enquanto procurava por 'python suprimir nova linha'. Estou usando o IDLE3 no Raspberry Pi para desenvolver o Python 3.2 para PuTTY. Eu queria criar uma barra de progresso na linha de comando do PuTTY. Eu não queria que a página rolasse para longe. Eu queria uma linha horizontal para garantir ao usuário que o programa não ficasse paralisado nem foi enviado para almoçar em um loop infinito e alegre - como um pedido para 'me deixar em paz, estou indo bem', mas isso pode levar algum tempo. mensagem interativa - como uma barra de progresso no texto.
Ele print('Skimming for', search_string, '\b! .001', end='')
inicializa a mensagem preparando-se para a próxima gravação na tela, que imprimirá três backspaces como ⌫⌫⌫ rubout e depois um ponto, apagando '001' e estendendo a linha de pontos. Após o search_string
papagaio de entrada do usuário, o \b!
apara o ponto de exclamação do meu search_string
texto para retornar ao espaço que de print()
outra forma força, colocando corretamente a pontuação. Isso é seguido por um espaço e o primeiro 'ponto' da 'barra de progresso' que estou simulando. Desnecessariamente, a mensagem também é iniciada com o número da página (formatado para um comprimento de três com zeros à esquerda) para notificar o usuário de que o progresso está sendo processado e que também refletirá a contagem de períodos que construiremos posteriormente para o direita.
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')
A carne da barra de progresso está na sys.stdout.write('\b\b\b.'+format(page, '03'))
linha. Primeiro, para apagar à esquerda, ele faz o backup dos três caracteres numéricos com o '\ b \ b \ b' como ⌫⌫⌫ rubout e elimina um novo período para adicionar ao comprimento da barra de progresso. Em seguida, ele grava três dígitos da página para a qual avançou até o momento. Como sys.stdout.write()
aguarda um buffer completo ou o canal de saída fechar, isso sys.stdout.flush()
força a gravação imediata. sys.stdout.flush()
é construído no final do print()
qual é ignorado print(txt, end='' )
. Em seguida, o código percorre suas operações intensivas de tempo mundano enquanto não imprime mais nada até retornar aqui para limpar três dígitos, adicionar um ponto final e escrever três dígitos novamente, incrementados.
Os três dígitos apagados e reescritos não são de forma alguma necessários - é apenas um floreio que exemplifica sys.stdout.write()
versus print()
. Você também pode preparar com facilidade um período e esquecer os três extremos backslash-b fancy (é claro que também não escreve contagens de páginas formatadas) apenas imprimindo a barra do período mais uma vez a cada vez - sem espaços ou novas linhas usando apenas o sys.stdout.write('.'); sys.stdout.flush()
par.
Observe que o shell Raspberry Pi IDLE3 Python não honra o backspace como ⌫ rubout, mas imprime um espaço, criando uma lista aparente de frações.
- (o = 8> wiz