Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menstrim Output Perintah Masa Nyata ke Proses Induk dan Fail Log?

Bagaimana untuk Menstrim Output Perintah Masa Nyata ke Proses Induk dan Fail Log?

Linda Hamilton
Lepaskan: 2024-12-15 07:26:13
asal
805 orang telah melayarinya

How to Stream Real-time Command Output to Parent Process and Log File?

Perintah Penstriman: Mengeluarkan Kemajuan dalam Masa Nyata

Dalam senario ini, anda menyasarkan untuk menstrim keluaran perintah yang dilaksanakan ke kedua-dua proses induk dan ke log fail. Walau bagaimanapun, cmd.StdoutPipe standard mengembalikan hasil akhir sebagai rentetan, yang menjadi had untuk proses yang berjalan lama.

Meneroka Penyelesaian

Kod yang disediakan, yang menggunakan exec.Command, StdoutPipe dan bufio.NewScanner, berfungsi seperti yang dimaksudkan. Ia secara berkesan menstrim output proses kanak-kanak, mencetaknya ke konsol dan log masuk dalam masa nyata. Output langsung proses anak ditangkap dan dipaparkan semasa ia berlaku.

Petua Penyelesaian Masalah

Jika kod itu tidak berfungsi untuk anda, pertimbangkan sebab berikut:

  • Baris Baharu Tiada: Bufio.NewScanner membaca keseluruhan baris, hanya mengembalikan data apabila menemui aksara baris baharu. Jika arahan tidak mencetak baris baharu, output mungkin tidak distrim serta-merta.
  • Penimbal Output Perintah: Proses mempunyai saiz penimbal lalai untuk stdout dan stderr. Jika penimbal diisi dan tidak dibaca, proses kanak-kanak mungkin tergantung kerana menyekat tulisan. Oleh itu, sentiasa baca stdout dan stderr untuk mengelakkan isu ini.

Kemungkinan Penyelesaian

Jika arahan tidak mencetak baris baharu, terdapat kaedah alternatif untuk menstrim output:

  • Baca Dengan Perkataan: Tetapkan fungsi pemisah pengimbas kepada bufio.ScanWords untuk membaca perkataan individu dan bukannya baris.
  • Baca Mengikut Aksara: Tetapkan fungsi pemisah pengimbas kepada bufio.ScanRunes untuk membaca aksara satu demi satu.
  • Bacaan Manual: Baca bait stdout demi bait atau rune demi rune, memastikan Pengekodan UTF-8 dikendalikan dengan betul.

Adalah penting untuk diingat bahawa jika proses anak menulis ke strim stdout dan stderr lalai, ia akan dibuang melainkan dibaca secara eksplisit. Membaca strim ini memastikan anda tidak terlepas sebarang output atau mesej ralat, walaupun proses anak biasanya tidak keluar ke strim ini.

Atas ialah kandungan terperinci Bagaimana untuk Menstrim Output Perintah Masa Nyata ke Proses Induk dan Fail Log?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan