別のプログラムをコンパイルして実行し、印刷のために標準出力をそれ自体にパイプするプログラムがあります。そのプログラムは終了しないため、標準出力をストリーミングする必要があります
// boilerplate ommited
func stream(stdoutPipe io.ReadCloser) {
buffer := make([]byte, 100, 1000)
for ;; {
n, err := stdoutPipe.Read(buffer)
if err == io.EOF {
stdoutPipe.Close()
break
}
buffer = buffer[0:n]
os.Stdout.Write(buffer)
}
}
func main() {
command := exec.Command("go", "run", "my-program.go")
stdoutPipe, _ := command.StdoutPipe()
_ = command.Start()
go stream(stdoutPipe)
do_my_own_thing()
command.Wait()
}
それは機能しますが、forループで繰り返しチェックせずに同じことを行うにはどうすればよいですか?同じことを行うライブラリ関数はありますか?