Melaksanakan Perintah dengan Tangkapan Stdout Masa Nyata
Untuk meningkatkan kefungsian bot sembang, matlamatnya adalah untuk membolehkannya laksanakan skrip dan strim output stdout terus ke dalam sembang. Walau bagaimanapun, pelaksanaan semasa menyimpan keseluruhan stdout sehingga akhir skrip. Untuk menyelesaikan masalah ini, kami mencari penyelesaian yang menyediakan output masa nyata.
Kod semasa menggunakan fungsi runcommand untuk melaksanakan skrip dan mengembalikan Stdout mereka. Untuk melaksanakan output masa nyata, kita mesti memisahkan proses pelaksanaan dan output. Mari kita ubah suai kod untuk menangani isu ini:
<code class="go">func reboot(command *bot.Cmd) (string, error) { n := command.Args[0] go runcommand(n) return "", nil }</code>
Fungsi but semula yang dikemas kini memulakan fungsi runcommand sebagai goroutine. Ini membolehkan pelaksanaan skrip berlaku serentak dengan interaksi bot sembang.
<code class="go">func runcommand(server string) { cmd := exec.Command("/bin/bash", "-c", "python test.py %s", server) cmdReader, err := cmd.StdoutPipe() if err != nil { fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err) return } scanner := bufio.NewScanner(cmdReader) for scanner.Scan() { fmt.Printf("\t > %s\n", scanner.Text()) } err = cmd.Run() if err != nil { fmt.Fprintln(os.Stderr, "Error starting Cmd", err) return } }</code>
Fungsi arahan jalan yang diubah suai kini menggunakan pengimbas untuk memantau Stdout skrip secara berterusan. Sebarang output dicetak serta-merta, mencapai tangkapan stdout masa nyata.
Dengan perubahan ini, bot sembang boleh melaksanakan skrip dengan berkesan dan menstrim output stdout mereka ke dalam sembang dalam masa nyata, memberikan pengalaman pengguna yang dipertingkatkan.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Tangkapan Stdout Masa Nyata untuk Pelaksanaan Skrip dalam Bot Sembang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!