ホームページ >バックエンド開発 >Golang >チャットボットからコマンド出力をリアルタイムでキャプチャするにはどうすればよいですか?

チャットボットからコマンド出力をリアルタイムでキャプチャするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 04:50:30674ブラウズ

How to Capture Command Output in Real Time from a Chat Bot?

コマンド実行からの出力をリアルタイムでキャプチャする方法

問題:

チャットボット内からコマンドを実行すると、コマンドの最後に標準出力出力が一度に返されます。リアルタイム出力を実現するには、リアルタイムで書き込むように実行を変更する必要があります。

提案された解決策:

提供された関数は 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>

このアプローチを使用すると、実行されたファイルからの stdout 出力が得られます。コマンドはリアルタイムでチャット チャネルにストリーミングされるため、即時のフィードバックとインタラクティブなコミュニケーションが可能になります。

以上がチャットボットからコマンド出力をリアルタイムでキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。