@lenooh spełnił moje zapytanie. Odkryłem ten artykuł, szukając hasła „python suppress newline”. Używam IDLE3 na Raspberry Pi do programowania Python 3.2 dla PuTTY. Chciałem utworzyć pasek postępu w linii poleceń PuTTY. Nie chciałem przewijać strony. Chciałem, aby linia pozioma ponownie zapewniła użytkownika, że nie wystraszy się, że program nie przestał się zatrzymywać ani nie został wysłany na lunch w wesołej, nieskończonej pętli - w ramach prośby „zostaw mnie, jestem w porządku, ale może to zająć trochę czasu. wiadomość interaktywna - jak pasek postępu w tekście.
print('Skimming for', search_string, '\b! .001', end='')
Inicjuje wiadomość poprzez przygotowanie do następnego ekranu i zapisu, który będzie drukować trzy backspace jak ⌫⌫⌫ rubout a potem okres, ścierając „001” i wydłużenie linii okresach. Po search_string
wprowadzeniu danych przez papugi, \b!
przycina wykrzyknik mojego search_string
tekstu, aby cofnął się o przestrzeń, która w print()
przeciwnym razie wymusza, odpowiednio umieszczając interpunkcję. Następnie następuje spacja i pierwsza „kropka” „paska postępu”, którą symuluję. Niepotrzebnie wiadomość jest następnie wypełniana również numerem strony (sformatowanym do długości trzech z wiodącymi zerami), aby zwrócić uwagę użytkownika na przetwarzanie danych, a także odzwierciedlić liczbę okresów, które później zbudujemy do dobrze.
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')
Mięso paska postępu znajduje się w sys.stdout.write('\b\b\b.'+format(page, '03'))
linii. Po pierwsze, aby skasować w lewo, tworzy kopię zapasową kursora nad trzema znakami numerycznymi za pomocą „\ b \ b \ b” jako „⌫⌫⌫” i upuszcza nowy okres, aby zwiększyć długość paska postępu. Następnie zapisuje trzy cyfry strony, do której doszedł do tej pory. Ponieważ sys.stdout.write()
czeka na zamknięcie pełnego bufora lub kanału wyjściowego, sys.stdout.flush()
wymusza natychmiastowy zapis. sys.stdout.flush()
jest wbudowany, na końcu print()
którego jest omijanyprint(txt, end='' )
. Następnie kod przechodzi przez swoje przyziemne operacje wymagające dużego nakładu czasu, podczas gdy nie drukuje nic więcej, dopóki nie powróci tutaj, aby usunąć trzy cyfry, dodać kropkę i ponownie napisać trzy cyfry, przyrostowo.
Trzy cyfry, wyczyszczone i przepisane, nie są w żadnym wypadku konieczne - to tylko zawijas, który stanowi przykład w sys.stdout.write()
porównaniu do print()
. Możesz równie łatwo zalać kropką i zapomnieć o trzech fantazyjnych odwrotnych ukośnikach-b ⌫ (oczywiście nie zapisując również sformatowanej liczby stron), po prostu drukując pasek kropki dłużej o jeden za każdym razem - bez spacji i znaków nowej linii, używając tylkosys.stdout.write('.'); sys.stdout.flush()
para.
Należy pamiętać, że powłoka Python Raspberry Pi IDLE3 nie honoruje backspace jako ⌫ wymazywania, ale zamiast tego drukuje spację, tworząc zamiast tego widoczną listę ułamków.
- (o = 8> wiz