Anda mungkin juga perlu menyiram buffer secara eksplisit agar bisa disalurkan ke generasi. Ini karena output biasanya hanya dicetak ketika buffer pipa terisi (yang menurut saya dalam kilobyte), dan ketika pesan stdin berakhir. Ini mungkin untuk menghemat baca/tulis. Anda dapat melakukan ini setelah setiap cetakan, atau jika Anda mengulang, setelah cetakan terakhir dalam putaran.
import sys
...
print('Some message')
sys.stdout.flush()
Jalankan python dengan flag tanpa buffer:
python -u myprog.py > output.txt
Output kemudian akan dicetak secara real time.
Alih-alih mencoba membuntuti file langsung, gunakan tee
alih-alih. Itu dibuat untuk melakukan apa yang Anda coba lakukan.
Dari man tee:
tee(1) - halaman manual Linux
Nama tee - baca dari input standar dan tulis ke output standar dan file
Sinopsis
tee [OPTION]... [FILE]...
Deskripsi
Salin input standar ke setiap FILE, dan juga ke output standar.
-a, --append append to the given FILEs, do not overwrite -i, --ignore-interrupts ignore interrupt signals --help display this help and exit --version output version information and exit
Jika FILE adalah -, salin lagi ke keluaran standar.
Jadi dalam kasus Anda, Anda akan menjalankan:
python myprog.py | tee output.txt
EDIT:Seperti yang telah ditunjukkan orang lain, jawaban ini akan mengalami masalah yang sama dengan yang awalnya dialami OP kecuali sys.stdout.flush()
digunakan dalam program python seperti yang dijelaskan dalam jawaban yang diterima Davey. Pengujian yang saya lakukan sebelum memposting jawaban ini tidak mencerminkan kasus penggunaan OP secara akurat.
tee
masih dapat digunakan sebagai alternatif - meskipun kurang optimal - metode untuk menampilkan keluaran sambil menulis ke file, tetapi jawaban Davey jelas merupakan jawaban yang benar dan terbaik.