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

チャットボットで実行されたコマンドのリアルタイム出力を表示するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-03 19:49:29
オリジナル
568 人が閲覧しました

How to Display Real-Time Output from Executed Commands in Chat Bots?

チャット ボットで実行されたコマンドからのリアルタイム出力の通信

コマンドを実行できるチャット ボットを設計する場合、出力を抽出して表示します。リアルタイムが極めて重要です。既存の実装が段階的にではなく一度にすべての stdout を返す場合、これは困難になる可能性があります。

既存のアプローチのトラブルシューティング

func runco​​mmand を使用するボットのコードは、実行完了時にすべての標準出力を解放します。リアルタイム出力を実現するために、別のアプローチを検討します。

リアルタイム出力パイプ手法

からの出力を継続的にパイプする手法を紹介します。チャットでコマンドを実行しました。これには以下が含まれます:

  1. cmdReader を使用したパイプの作成、err := cmd.StdoutPipe().
  2. スキャナーを使用して出力を増分的に読み取る: scanner := bufio.NewScanner(cmdReader ).
  3. 出力を継続的に出力する 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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート