Untuk menerapkan bilah status seperti di bawah ini:
[========== ] 45%
[================ ] 60%
[==========================] 100%
Saya ingin ini dicetak ke stdout, dan terus menyegarkan, bukan mencetak ke baris lain. Bagaimana cara melakukannya?
Jawaban:
Ada modul Python yang bisa Anda dapatkan dari PyPI yang disebut
progressbar
yang mengimplementasikan fungsi tersebut. Jika Anda tidak keberatan menambahkan ketergantungan, itu adalah solusi yang bagus. Kalau tidak, pergilah dengan salah satu jawaban lain.Contoh sederhana cara menggunakannya:
Untuk menginstalnya, Anda dapat menggunakan
easy_install progressbar
, ataupip install progressbar
jika Anda lebih suka pip.sumber
bar.start()
?bar.start()
sudo -H pip install progressbar2
.The
'\r'
karakter (carriage return) me-reset kursor ke awal baris dan memungkinkan Anda untuk menulis lebih apa yang sebelumnya di telepon.Saya tidak 100% yakin apakah ini sepenuhnya portabel di semua sistem, tetapi paling tidak bekerja di Linux dan OSX.
sumber
n=21
, gantirange(21)
denganrange(n)
, kemudian tambahkanj = (i + 1) / n
dalam loop, dan menggantiwrite
pernyataan dengan sedikit modifikasi ini:sys.stdout.write("[%-20s] %d%%" % ('='*int(20*j), 100*j))
. Sekarang satu-satunya perubahan yang perlu Anda lakukan adalahn=21
sebelum loop (lebih mungkinn=len(iterable)
), kemudian menghitung lebih dari objek iterable. Saya merekomendasikan suntingan ini tetapi ditolak; rupanya fungsionalitas "menyimpang dari maksud asli kiriman".sys.stdout.write("[{:{}}] {:.1f}%".format("="*i, n-1, (100/(n-1)*i)))
hanya Python 3Saya menemukan tqdm perpustakaan yang bermanfaat ( https://github.com/tqdm/tqdm/ , sebelumnya: https://github.com/noamraph/tqdm ). Secara otomatis memperkirakan waktu penyelesaian dan dapat digunakan sebagai iterator.
Pemakaian:
Hasil dalam:
tqdm
dapat membungkus iterable.sumber
Anda dapat menggunakan
\r
( carriage return ). Demo:sumber
total
sebagai10
, maka Anda mendapatkan pesan kesalahanZeroDivisionError: long division or modulo by zero
Di sini Anda dapat menggunakan kode berikut sebagai fungsi:
Dengan menggunakan .format:
sumber
] percent * 100 %
berdasarkan jawaban di atas dan pertanyaan serupa lainnya tentang bilah kemajuan CLI, saya pikir saya mendapat jawaban umum yang umum untuk semuanya. Periksa di https://stackoverflow.com/a/15860757/2254146
Berikut adalah salinan fungsi, tetapi dimodifikasi agar sesuai dengan gaya Anda:
Seperti
Persen: [====================] 99,0%
sumber
Jika Anda mengembangkan antarmuka baris perintah, saya sarankan Anda untuk melihat
click
yang sangat bagus:Di sini output yang Anda dapatkan:
sumber
Peningkatan lebih lanjut, menggunakan fungsi sebagai:
contoh panggilan:
keluaran:
sumber
Saya menemukan utas ini hari ini dan setelah mencoba solusi ini dari Mark Rushakoff
Saya dapat mengatakan bahwa ini berfungsi dengan baik pada W7-64 dengan python 3.4.3 64-bit tetapi hanya di konsol asli. Namun ketika menggunakan konsol built-in spyder 3.0.0dev, jeda baris masih ada / lagi. Karena ini perlu waktu bagi saya untuk mencari tahu, saya ingin melaporkan pengamatan ini di sini.
sumber
Membangun beberapa jawaban di sini dan di tempat lain, saya telah menulis fungsi sederhana ini yang menampilkan bilah kemajuan dan sisa waktu yang diperkirakan. Harus bekerja pada sebagian besar mesin berbasis unix.
sumber
Ini cukup pendekatan sederhana yang dapat digunakan dengan loop apa pun.
sumber
Paling mudah masih
Kuncinya adalah untuk mengkonversi tipe integer ke string.
sumber
Seperti dijelaskan dalam solusi Mark Rushakoff , Anda dapat menampilkan karakter carriage return
sys.stdout.write('\r')
,, untuk mengatur ulang kursor ke awal baris. Untuk menggeneralisasi solusi itu, sambil juga mengimplementasikan f-Strings Python 3 , Anda bisa menggunakansumber
Coba PyProg. PyProg adalah pustaka sumber terbuka untuk Python untuk membuat indikator & bilah kemajuan yang dapat disesuaikan.
Saat ini di versi 1.0.2; di-host di Github dan tersedia di PyPI (Tautan di bawah). Ini kompatibel dengan Python 3 & 2 dan juga dapat digunakan dengan Qt Console.
Ini sangat mudah digunakan. Kode berikut:
akan menghasilkan apa yang Anda inginkan (bahkan panjang bilah!):
Untuk opsi lainnya untuk menyesuaikan bilah kemajuan, buka halaman Github dari situs web ini.
Saya benar-benar membuat PyProg karena saya membutuhkan pustaka kemajuan sederhana namun super dapat dikustomisasi. Anda dapat dengan mudah menginstalnya dengan:
pip install pyprog
.PyProg Github: https://github.com/Bill13579/pyprog
PyPI: https://pypi.python.org/pypi/pyprog/
sumber
Menggunakan jawaban @ Mark-Rushakoff, saya berhasil menggunakan pendekatan yang lebih sederhana, tidak perlu memanggil perpustakaan sys. Ini bekerja dengan Python 3. Diuji di Windows:
sumber
print
adalah pembungkus tipis yang memformat input dan memanggil fungsi tulis dari objek yang diberikan. Secara default objek ini adalahsys.stdout
.Ini adalah sesuatu yang saya buat menggunakan solusi oleh @ Mark-Rushakoff. Untuk menyesuaikan dengan lebar terminal secara adaptif.
sumber