ストリーミング コマンド出力の進行状況
質問:
長いコマンドから出力をストリーミングするにはどうすればよいですか? -running コマンド。最終更新ではなく、断続的な更新を提供します。 result?
答え:
bufio.ScanLines() で bufio.NewScanner() 関数を使用すると、コマンドの出力を 1 行ずつ読み取ることができます。 、結果が利用可能になったらストリーミングします。以下は、提供されたコードに基づいて変更された例です:
func main() { cmd := exec.Command("go", "run", "child_process.go") stdout, _ := cmd.StdoutPipe() cmd.Start() scanner := bufio.NewScanner(stdout) for scanner.Scan() { fmt.Println(scanner.Text()) log.Printf(scanner.Text()) } cmd.Wait() }
これが効果的に機能するには、実行されたコマンドは fmt.Println() または log.Printf() を使用して進行状況を出力する必要があります。
考えられる落とし穴:
代替解決策:
改行文字が信頼できない場合は、代替方法を使用できます。雇用:
注意:
バイト単位での読み取り、またはrunewise では、マルチバイト UTF-8 エンコード文字に関する問題が発生する可能性があります。 UTF-8 ルーンをキャプチャするのに十分な大きさのバッファを使用する必要があります。
以上がGo で長時間実行されるコマンドの出力の進行状況をストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。