@lenooh ha soddisfatto la mia domanda. Ho scoperto questo articolo mentre cercavo "python soppress newline". Sto usando IDLE3 su Raspberry Pi per sviluppare Python 3.2 per PuTTY. Volevo creare una barra di avanzamento sulla riga di comando di PuTTY. Non volevo che la pagina scorresse via. Volevo una linea orizzontale per rassicurare l'utente dal dare di matto che il programma non si è bloccato e non è stato mandato a pranzo in un gioioso ciclo infinito - come un appello a "lasciarmi stare, sto bene, ma questo potrebbe richiedere del tempo. " messaggio interattivo - come una barra di avanzamento nel testo.
Il print('Skimming for', search_string, '\b! .001', end='')
inizializza il messaggio preparando per il prossimo schermo-scrittura, che stamperà tre backspaces come ⌫⌫⌫ rubout e quindi un periodo, rimuovendo '001' ed estendendo la linea di periodi. Dopo search_string
l'input dell'utente da parte dei pappagalli, il \b!
punto esclamativo del mio search_string
testo viene ritagliato sullo spazio che print()
altrimenti forza, posizionando correttamente la punteggiatura. Segue uno spazio e il primo "punto" della "barra di avanzamento" che sto simulando. Inutilmente, il messaggio viene quindi innescato con il numero di pagina (formattato con una lunghezza di tre con zeri iniziali) per notare all'utente che i progressi vengono elaborati e che rifletterà anche il conteggio dei periodi che in seguito costruiremo al destra.
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')
La barra di avanzamento è nel sys.stdout.write('\b\b\b.'+format(page, '03'))
linea. Innanzitutto, per cancellare a sinistra, esegue il backup del cursore sui tre caratteri numerici con il rublo "\ b \ b \ b" come ⌫⌫⌫ e rilascia un nuovo punto da aggiungere alla lunghezza della barra di avanzamento. Quindi scrive tre cifre della pagina in cui è progredita finora. Poiché sys.stdout.write()
attende la chiusura di un buffer completo o del canale di output, sys.stdout.flush()
forza la scrittura immediata. sys.stdout.flush()
è incorporato alla fine del print()
quale è bypassato print(txt, end='' )
. Quindi il codice scorre ciclicamente le sue operazioni quotidiane mentre non stampa più nulla fino a quando non ritorna qui per cancellare tre cifre, aggiungere un punto e scrivere di nuovo tre cifre, incrementato.
Le tre cifre cancellate e riscritte non sono affatto necessarie - è solo un fiorire che esemplifica sys.stdout.write()
contro print()
. Puoi semplicemente eseguire il priming con un punto e dimenticare i tre fantasi backslash-b ⌫ backspaces (ovviamente non scrivere anche il conteggio delle pagine formattate) semplicemente stampando la barra del periodo più a lungo di una ogni volta - senza spazi o newline usando solo il sys.stdout.write('.'); sys.stdout.flush()
paio.
Si noti che la shell Raspberry Pi IDLE3 Python non rispetta il backspace come ⌫ rubout ma stampa invece uno spazio, creando invece un elenco apparente di frazioni.
- (o = 8> wiz