透過即時標準輸出擷取執行指令
為了增強聊天機器人的功能,目標是使其能夠執行腳本並將標準輸出直接串流到聊天中。但是,目前的實作會儲存整個標準輸出,直到腳本結束。為了解決這個問題,我們尋求一種提供即時輸出的解決方案。
目前程式碼利用 runcommand 函數來執行腳本並傳回其標準輸出。要實現即時輸出,必須將執行過程和輸出過程解耦。讓我們修改程式碼來解決這個問題:
<code class="go">func reboot(command *bot.Cmd) (string, error) { n := command.Args[0] go runcommand(n) return "", nil }</code>
更新後的重啟函數將 runcommand 函數作為 goroutine 啟動。這允許腳本執行與聊天機器人的互動同時發生。
<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>
修改後的 runcommand 函數現在使用掃描器來連續監視腳本的標準輸出。任何輸出都會立即列印,實現即時標準輸出捕獲。
透過這些更改,聊天機器人可以有效地執行腳本並將其標準輸出輸出即時傳輸到聊天中,從而提供增強的用戶體驗。
以上是如何在聊天機器人中實現腳本執行的即時標準輸出擷取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!