@ lenooh memenuhi permintaan saya. Saya menemukan artikel ini ketika mencari 'python suppress newline'. Saya menggunakan IDLE3 pada Raspberry Pi untuk mengembangkan Python 3.2 untuk Putty. Saya ingin membuat progress bar di baris perintah Putty. Saya tidak ingin halamannya bergulir. Saya ingin garis horizontal untuk meyakinkan kembali pengguna dari ketakutan bahwa program belum terhenti atau telah dikirim untuk makan siang pada putaran tak terbatas yang meriah - sebagai permohonan untuk 'tinggalkan aku, saya baik-baik saja, tetapi ini mungkin membutuhkan waktu. ' pesan interaktif - seperti bilah progres dalam teks.
The print('Skimming for', search_string, '\b! .001', end='')
menginisialisasi pesan dengan mempersiapkan untuk layar-write berikutnya, yang akan mencetak tiga backspaces sebagai rubout ⌫⌫⌫ dan kemudian periode, menyeka '001' dan memperluas garis periode. Setelah search_string
input pengguna burung beo, \b!
trim tanda seru search_string
teks saya untuk kembali ke ruang yang print()
sebaliknya memaksa, menempatkan tanda baca dengan benar. Itu diikuti oleh spasi dan 'titik' pertama dari 'progress bar' yang saya simulasi. Tanpa perlu, pesan juga kemudian dipilah dengan nomor halaman (diformat hingga panjang tiga dengan angka nol di depan) untuk memperhatikan dari pengguna bahwa kemajuan sedang diproses dan yang juga akan mencerminkan jumlah periode yang nantinya akan kita buat hingga Baik.
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')
Daging progress bar ada di sys.stdout.write('\b\b\b.'+format(page, '03'))
barisan. Pertama, untuk menghapus ke kiri, itu akan mencadangkan kursor di atas tiga karakter numerik dengan '\ b \ b \ b' sebagai out menggosok dan menjatuhkan periode baru untuk menambah panjang bilah kemajuan. Kemudian ia menulis tiga digit halaman yang telah berkembang sejauh ini. Karena sys.stdout.write()
menunggu buffer penuh atau saluran output ditutup, sys.stdout.flush()
memaksa penulisan langsung. sys.stdout.flush()
dibangun ke ujung print()
yang dilewati dengan print(txt, end='' )
. Kemudian kode loop melalui operasi intensif waktu duniawi sementara itu mencetak tidak lebih sampai kembali ke sini untuk menghapus tiga digit kembali, menambahkan titik dan menulis tiga digit lagi, bertambah.
Tiga digit yang dihapus dan ditulis ulang sama sekali tidak perlu - itu hanya berkembang yang dicontohkan sys.stdout.write()
versus print()
. Anda dapat dengan mudah prime dengan titik dan lupakan tiga backslash-b ⌫ backspace mewah (tentu saja tidak menulis jumlah halaman diformat juga) dengan hanya mencetak periode bar lebih lama dengan satu setiap kali melalui - tanpa spasi atau baris menggunakan hanya dengan sys.stdout.write('.'); sys.stdout.flush()
pasangan.
Harap dicatat bahwa shell Raspberry Pi IDLE3 Python tidak menghormati backspace sebagai ⌫ rubout tetapi malah mencetak spasi, sebagai gantinya membuat daftar pecahan yang jelas.
- (o = 8> ahli