在聊天機器人中傳達執行命令的即時輸出
設計能夠執行命令的聊天機器人時,提取並顯示輸出即時性至關重要。當現有實現立即返回所有標準輸出而不是增量返回時,這可能具有挑戰性。
對現有方法進行故障排除
您的機器人程式碼使用 func runcommand,收集和執行完成後釋放所有標準輸出。為了實現即時輸出,我們將探索一種替代方法。
即時輸出管道技術
我們引入了一種連續管道輸出的技術在聊天中執行命令。這涉及:
設定一個goroutine 來連續列印輸出:
go func() { for scanner.Scan() { fmt.Printf("\t > %s\n", scanner.Text()) } }()
範例程式碼
以下是一個透過管道傳輸用於監視日誌檔案的tail 指令的即時輸出的範例:package main import ( "os" "os/exec" "fmt" "bufio" ) func main() { cmd := exec.Command("tail", "-f", "/usr/local/var/log/redis.log") // 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) go func() { for scanner.Scan() { fmt.Printf("\t > %s\n", scanner.Text()) } }() err = cmd.Start() if err != nil { fmt.Fprintln(os.Stderr, "Error starting Cmd", err) return } err = cmd.Wait() if err != nil { fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err) return } }
以上是如何顯示聊天機器人中執行命令的即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!