J'ai un programme qui compile et exécute un autre programme et se renvoie le stdout à lui-même pour l'impression, puisque ce programme ne se termine pas et que j'ai besoin de streamer son stdout.
// 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()
}
Cela fonctionne, mais comment puis-je faire la même chose sans vérifier de manière répétée avec une boucle for, existe-t-il une fonction de bibliothèque qui fait la même chose ?