如何即時捕捉指令執行的輸出
問題:
何時從機器人聊天中執行命令時,標準輸出輸出會在命令結束時立即返回。為了實現即時輸出,需要修改其執行方式以即時寫入。
建議的解決方案:
提供的函數一次收集所有 stdout 輸出並在完成後返回。我們可以透過使用管道即時捕獲輸出來改進這一點。
實作:
<code class="go">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 } }</code>
使用此方法,執行的標準輸出指令將即時傳送到聊天頻道,以便即時回饋和互動溝通。
以上是如何從聊天機器人即時捕捉命令輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!