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
458 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!

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