リアルタイム標準出力キャプチャを使用したコマンドの実行
チャット ボットの機能を強化するための目標は、次のことを可能にすることです。スクリプトを実行し、標準出力出力をチャットに直接ストリーミングします。ただし、現在の実装では、スクリプトが終了するまで標準出力全体が保存されます。これを解決するには、リアルタイム出力を提供するソリューションを探します。
現在のコードは、runcommand 関数を利用してスクリプトを実行し、標準出力を返します。リアルタイム出力を実装するには、実行プロセスと出力プロセスを分離する必要があります。この問題に対処するためにコードを変更しましょう。
<code class="go">func reboot(command *bot.Cmd) (string, error) { n := command.Args[0] go runcommand(n) return "", nil }</code>
更新された再起動関数は、runcommand 関数を 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>
変更された runcommand 関数は、スキャナーを使用してスクリプトの標準出力を継続的に監視するようになりました。出力はすぐに印刷され、リアルタイムの標準出力キャプチャが実現します。
これらの変更により、チャット ボットはスクリプトを効果的に実行し、標準出力出力をリアルタイムでチャットにストリーミングできるようになり、ユーザー エクスペリエンスが向上します。
以上がチャットボットでスクリプトを実行するためにリアルタイムの標準出力キャプチャを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。