Go でコマンドを実行すると、外部プロセスと対話できますが、リアルタイムでの出力が必要な場合は、次の方法があります。
コード スニペットでは、コマンドの完了後に出力が一度に出力されます。出力をライブで表示するには、以下で概説する手法を組み込むことができます。
// ... Previous code for _, cp := range cmdParams { log.Printf("Starting %s in folder %s...", cp[1:], cp[0]) cmd := exec.Command(cp[1], cp[2:]...) cmd.Dir = cp[0] stdout, err := cmd.StdoutPipe() if err != nil { log.Printf("%s cmd.StdoutPipe() error: %v\n", cp[1:], err) return } // Start command: if err = cmd.Start(); err != nil { log.Printf("%s start error: %v\n", cp[1:], err) return } // Stream command output: scanner := bufio.NewScanner(stdout) scanner.Split(bufio.ScanRunes) for scanner.Scan() { fmt.Print(scanner.Text()) } if scanner.Err() != nil { log.Printf("Reading %s stdout error: %v\n", cp[1:], err) return } // Get execution success or failure: if err = cmd.Wait(); err != nil { log.Printf("Error running %s: %v\n", cp[1:], err) return } log.Printf("Finished %s", cp[1:]) } // ... Remaining code
この変更では、bufio.Scanner を使用してコマンドの標準出力をリアルタイムで読み取ります。 Split(bufio.ScanRunes) は、スキャナーに個々の文字を読み取るように指示します。これにより、生成中の出力を表示できるようになります。
scanner.Scan() を繰り返し呼び出し、scanner.Text() を出力することによって、出力の終わりに達すると、コマンドの出力を画面上にライブでストリーミングできます。
以上がGo でコマンド出力をストリーミングしてライブ結果を得るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。