J'essaie de diffuser la commande Stdout d'une commande shell vers la console, mais j'ai de la difficulté.Streaming exec.Command StdoutPipe
Voici ce que j'ai actuellement.
cmd := exec.Command("sh", "-c", `for number in {0..10}; do echo "$number "; done;`)
pipe, _ := cmd.StdoutPipe()
reader := bufio.NewReader(pipe)
line, err := reader.ReadString('\n')
for err == nil {
fmt.Println(line)
line, err = reader.ReadString('\n')
}
je me attends à ce pour imprimer les chiffres de 0 à 10, mais il semble accrocher sur la ligne 3 (le premier appel à ReadString
I a commencé avec cmd.Output()
et cmd.CombinedOutput()
, mais ces méthodes semblent mettre en mémoire tampon le flux de sortie entier jusqu'à ce que la commande soit terminée.J'ai besoin de traiter la sortie comme elle flux, pas attendre jusqu'à ce que la commande soit terminée.J'ai aussi essayé ceci: continuously reading from exec.Cmd output, mais ça n'a pas l'air de marcher et je m'en suis éloigné parce que je veux vraiment lire les lignes et ne pas avoir à gérer le buffer manuellement.
D'autres choses que j'ai regardé par:
- https://groups.google.com/forum/#!topic/golang-nuts/0xK_IHbHPUU
- https://golang.org/pkg/os/exec/
- https://golang.org/pkg/bufio/
Vraisemblablement, vous essayez de faire quelque chose de plus compliqué que cela, mais si vous ne voulez vraiment copier que la sortie de la commande vers stdout, il suffit d'assigner os.Stdout à cmd.Stdout. – Peter
Je faisais quelque chose de plus compliqué que ça, mais j'apprécie le pourboire! Merci! – Joe