Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menstrim Kemajuan Output Perintah Berjangka Panjang dalam Go?

Bagaimana untuk Menstrim Kemajuan Output Perintah Berjangka Panjang dalam Go?

Susan Sarandon
Lepaskan: 2024-12-14 17:30:10
asal
547 orang telah melayarinya

How to Stream the Progress of a Long-Running Command's Output in Go?

Menstrim Kemajuan Output Perintah

Soalan:

Bagaimana saya boleh menstrim output dari masa yang lama -menjalankan arahan, menyediakan kemas kini sekejap-sekejap dan bukannya akhir keputusan?

Jawapan:

Menggunakan fungsi bufio.NewScanner() dengan bufio.ScanLines() membolehkan anda membaca output arahan baris demi baris , menstrim keputusan apabila ia tersedia. Di bawah ialah contoh yang diubah suai berdasarkan kod yang anda berikan:

func main() {
    cmd := exec.Command("go", "run", "child_process.go")

    stdout, _ := cmd.StdoutPipe()
    cmd.Start()

    scanner := bufio.NewScanner(stdout)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
        log.Printf(scanner.Text())
    }

    cmd.Wait()
}
Salin selepas log masuk

Untuk ini berfungsi dengan berkesan, arahan yang dilaksanakan harus mengeluarkan kemajuan menggunakan fmt.Println() atau log.Printf().

Kemungkinan Perangkap:

  • Jika arahan tidak dicetak baris baharu, ScanLines() hanya akan menghasilkan output setelah arahan selesai.
  • Secara lalai, output standard dan aliran ralat dibuang melainkan disambungkan secara eksplisit kepada proses lain. Ini boleh menyebabkan isu penyekatan, jadi membaca kedua-dua strim adalah disyorkan.

Penyelesaian Alternatif:

Dalam kes di mana aksara baris baharu tidak boleh dipercayai, kaedah alternatif boleh bekerja:

  • ScanRunes: Dibaca oleh aksara individu menggunakan bufio.ScanRunes().
  • Bacaan Manual: Bacaan secara byte atau rune-wise tanpa bergantung pada bufio.Scanner.

Awas:

Membaca secara bait atau rune mungkin menimbulkan isu dengan aksara berkod UTF-8 berbilang bait. Penampan yang cukup besar untuk menangkap rune UTF-8 harus digunakan.

Atas ialah kandungan terperinci Bagaimana untuk Menstrim Kemajuan Output Perintah Berjangka Panjang dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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