GNU/Linux >> Belajar Linux >  >> Linux

Menonton sesuatu ditulis ke file langsung dengan ekor

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.


Linux
  1. Mewarnai Keluaran Ekor Dengan Sed?

  2. Bagaimana Cara Mengeluarkan File &Mengabaikan Baris Yang Dimulai Dengan "?"?

  3. Cara mengarahkan output ke file dan stdout

  1. Cara tail -f file log terbaru dengan pola yang diberikan

  2. Output perintah dialihkan ke file dan terminal

  3. Perilaku rsync dengan file yang masih ditulis?

  1. Bekerja dengan Input Output dan Error Redirection di Linux

  2. Apakah aman membuka file yang sedang ditulis oleh skrip yang sedang berjalan?

  3. Terus pantau log dengan ekor yang sesekali diputar