Menangkap stdout Pelaksanaan Perintah dalam Masa Nyata
Dalam chatbot yang melaksanakan arahan, kita sering menghadapi keperluan untuk memaparkan stdout skrip dalam antara muka sembang. Walaupun pelaksanaan semasa mengumpul dan mengembalikan keseluruhan stdout sekaligus, kami mencari penyelesaian yang menyediakan output dalam masa nyata.
Memeriksa kod yang diberikan mendedahkan had di mana stdout diambil dan dikembalikan dalam satu panggilan fungsi (but semula()). Untuk mengeluarkan teks dalam masa nyata, kita perlu mengulangi arahan pelaksanaan dan menangkap stdout secara berterusan.
Kunci kepada penyelesaian ini ialah menggunakan kaedah StdoutPipe, yang membolehkan kami mencipta paip untuk menangkap output perintah yang dilaksanakan. Dengan mewujudkan paip untuk stdout arahan, kami boleh membaca dan memaparkan output secara berterusan.
Kod Diperbaiki:
<code class="go">package main import ( "os" "os/exec" "fmt" "bufio" ) func main() { // Specify the command to execute cmd := exec.Command("command", "arguments") // Create a pipe for the output of the script cmdReader, err := cmd.StdoutPipe() if err != nil { fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err) return } scanner := bufio.NewScanner(cmdReader) // Launch a goroutine to continuously read and display the output go func() { for scanner.Scan() { fmt.Printf("\t > %s\n", scanner.Text()) } }() // Start the execution of the command err = cmd.Start() if err != nil { fmt.Fprintln(os.Stderr, "Error starting Cmd", err) return } // Wait for the command to complete err = cmd.Wait() if err != nil { fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err) return } }</code>
Dalam penyelesaian yang dipertingkat ini, kami terus membaca output daripada stdout arahan dalam goroutine, membenarkan paparan masa nyata stdout dalam antara muka sembang. Ini menghapuskan keperluan untuk penimbal yang besar dan mengelakkan pengembalian keseluruhan stdout dalam satu panggilan fungsi, menangani isu asal.
Atas ialah kandungan terperinci Bagaimana untuk Menangkap stdout Pelaksanaan Perintah dalam Masa Nyata?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!