Saya memiliki skrip Perl pada sistem * nix yang, pada satu titik, sedang memproses 50.000 baris teks. Ini membutuhkan waktu. Saya mencoba menemukan cara yang ramah sumber daya untuk memberi tahu pengguna bahwa programnya tidak hang ketika sedang memproses semua teks ini.
Saat ini saya mencetak hasil secara realtime karena teks sedang diproses. Saya menyiram buffer output kemudian mencetak output pada satu baris dengan \r
. Ini tampaknya merupakan penggunaan sumber daya yang tidak perlu karena butuh waktu hampir dua kali lebih lama daripada ketika saya tidak mencetak apa-apa, tetapi seperti yang telah saya katakan, ketika mencetak tidak ada yang terlihat seperti program sedang menggantung.
Jadi pertanyaan saya: Apakah ada cara standar atau sederhana untuk memberi tahu pengguna bahwa program tersebut benar-benar berjalan sambil melakukan tugas yang berjalan lama?
Jawaban:
[Saya baru sadar skrip Anda perl , tetapi logika yang sama berlaku
print "\r"
,, dll. Anda akan ingin menggunakanSTDERR
atau mematikan buffering$| = 1
,. Lihat bagian bawah.]Salah satu cara menerapkan CLI "indikator kemajuan" melibatkan penggunaan karakter
\r
(carriage return). Ini membawa kursor ke awal baris saat ini:Jika tidak masuk akal, coba saja.
Anda dapat menggunakan teknik itu untuk menunjukkan berapa banyak garis, atau ribuan garis, telah diproses sejauh ini. Puluhan atau ratusan baris mungkin bagus karena tidak terlalu sering (lebih banyak pembaruan == runtime lebih lambat) tetapi mungkin masih cukup sering untuk menunjukkan kemajuan terus berlanjut. Anda dapat menentukan unit atau hanya menambahkan nol.
Perhatikan penggunaan
-n
dan-e
denganecho
, itu penting.Anda juga dapat menggunakan
\b
(backspace) untuk efek yang sama.Dalam perl:
sumber
Cetak satu
.
tanpa menggema baris baru saat Anda memproses. Teknik tua usia.Jadi, Anda mendapatkan:
Processing...............
Sederhana dan efektif.
sumber