ホームページ  >  記事  >  バックエンド開発  >  チャットボットでスクリプトを実行するためにリアルタイムの標準出力キャプチャを実現するにはどうすればよいですか?

チャットボットでスクリプトを実行するためにリアルタイムの標準出力キャプチャを実現するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 07:50:30162ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

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