Jawaban:
Standar keluar Python adalah buffer (artinya mengumpulkan beberapa data "ditulis" ke standar keluar sebelum ia menulisnya ke terminal). Memanggil sys.stdout.flush()
memaksanya untuk "menyirami" buffer, artinya ia akan menulis semua yang ada di buffer ke terminal, bahkan jika biasanya ia akan menunggu sebelum melakukannya.
Berikut ini beberapa informasi bagus tentang (tidak) buffered I / O dan mengapa ini berguna:
http://en.wikipedia.org/wiki/Data_buffer
Buffered vs IO unbuffered
sys.stdout.write("%d" % i)
, maka saya harus membatalkan komentar panggilan sys.stdout.flush()
untuk mendapatkan buffer untuk ditampilkan saat skrip mengeksekusi.
Pertimbangkan skrip Python sederhana berikut ini:
import time
import sys
for i in range(5):
print(i),
#sys.stdout.flush()
time.sleep(1)
Ini dirancang untuk mencetak satu angka setiap detik selama lima detik, tetapi jika Anda menjalankannya seperti sekarang (tergantung pada buffering sistem default Anda), Anda mungkin tidak melihat output apa pun sampai skrip selesai, dan kemudian secara bersamaan Anda akan melihat hasil 0 1 2 3 4
cetak ke layar.
Ini karena output sedang buffered, dan kecuali Anda menyiram sys.stdout
setelah masing-masing, print
Anda tidak akan segera melihat outputnya. Hapus komentar dari sys.stdout.flush()
baris untuk melihat perbedaannya.
Sesuai pemahaman saya, Kapan pun kita mengeksekusi print statement, output akan ditulis ke buffer. Dan kita akan melihat output di layar ketika buffer disiram (dihapus). Secara default, buffer akan memerah ketika program keluar. TAPI KITA BISA JUGA MENYUSUN BUFFER SECARA MANUAL dengan menggunakan pernyataan "sys.stdout.flush ()" di program. Pada kode di bawah ini buffer akan memerah ketika nilai i mencapai 5.
Anda dapat memahami dengan mengeksekusi kode di bawah ini.
chiru@online:~$ cat flush.py
import time
import sys
for i in range(10):
print i
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
time.sleep(1)
for i in range(10):
print i,
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
chiru@online:~$ python flush.py
0 1 2 3 4 5 Flushing buffer
6 7 8 9 0 1 2 3 4 5 Flushing buffer
6 7 8 9
print i
untuk mendapatkan hasil Anda
Sesuai pemahaman saya sys.stdout.flush () mendorong semua data yang telah disangga ke titik itu ke objek file. Saat menggunakan stdout, data disimpan dalam memori buffer (untuk beberapa waktu atau hingga memori terisi) sebelum ditulis ke terminal. Menggunakan kekuatan flush () untuk mengosongkan buffer dan menulis ke terminal bahkan sebelum buffer memiliki ruang kosong.