コマンド実行からの出力をリアルタイムでキャプチャする方法
問題:
チャットボット内からコマンドを実行すると、コマンドの最後に標準出力出力が一度に返されます。リアルタイム出力を実現するには、リアルタイムで書き込むように実行を変更する必要があります。
提案された解決策:
提供された関数は 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 サイトの他の関連記事を参照してください。