J'écris un programme en Go qui exécute un programme de type serveur (également Go). Maintenant, je veux avoir le stdout du programme enfant dans ma fenêtre de terminal où j'ai démarré le programme parent. Une façon de le faire est d'utiliser la cmd.Output()
fonction, mais cela n'imprime le stdout qu'une fois le processus terminé. (C'est un problème car ce programme de type serveur fonctionne pendant longtemps et je souhaite lire la sortie du journal)
La variable out
est de type io.ReadCloser
et je ne sais pas ce que je dois en faire pour accomplir ma tâche, et je ne trouve rien d'utile sur le Web à ce sujet.
func main() {
cmd := exec.Command("/path/to/my/child/program")
out, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
}
err = cmd.Start()
if err != nil {
fmt.Println(err)
}
//fmt.Println(out)
cmd.Wait()
}
Explication au code: décommentez la Println
fonction pour obtenir le code à compiler, je sais que ce Println(out io.ReadCloser)
n'est pas une fonction significative.
(il produit la sortie &{3 |0 <nil> 0}
) Ces deux lignes sont juste nécessaires pour obtenir le code à compiler.
io.Copy
dans les routines aller
cmd.Wait()
ou de faire la for{}
boucle ... pourquoi sont-ils ici?