Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menstrim Kemajuan Output Perintah Berjangka Panjang dalam 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() }
Untuk ini berfungsi dengan berkesan, arahan yang dilaksanakan harus mengeluarkan kemajuan menggunakan fmt.Println() atau log.Printf().
Kemungkinan Perangkap:
Penyelesaian Alternatif:
Dalam kes di mana aksara baris baharu tidak boleh dipercayai, kaedah alternatif boleh bekerja:
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!