首頁 >後端開發 >Golang >如何在聊天機器人中實現腳本執行的即時標準輸出擷取?

如何在聊天機器人中實現腳本執行的即時標準輸出擷取?

Patricia Arquette
Patricia Arquette原創
2024-11-01 07:50:30264瀏覽

How to Achieve Real-Time Stdout Capture for Script Execution in a Chat Bot?

透過即時標準輸出擷取執行指令

為了增強聊天機器人的功能,目標是使其能夠執行腳本並將標準輸出直接串流到聊天中。但是,目前的實作會儲存整個標準輸出,直到腳本結束。為了解決這個問題,我們尋求一種提供即時輸出的解決方案。

目前程式碼利用 runco​​mmand 函數來執行腳本並傳回其標準輸出。要實現即時輸出,必須將執行過程和輸出過程解耦。讓我們修改程式碼來解決這個問題:

<code class="go">func reboot(command *bot.Cmd) (string, error) {
    n := command.Args[0]
    go runcommand(n)
    return "", nil
}</code>

更新後的重啟函數將 runco​​mmand 函數作為 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>

修改後的 runco​​mmand 函數現在使用掃描器來連續監視腳本的標準輸出。任何輸出都會立即列印,實現即時標準輸出捕獲。

透過這些更改,聊天機器人可以有效地執行腳本並將其標準輸出輸出即時傳輸到聊天中,從而提供增強的用戶體驗。

以上是如何在聊天機器人中實現腳本執行的即時標準輸出擷取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn