Ich versuche, die Stdout von einem Shell-Befehl auf die Konsole zu streamen, habe aber Schwierigkeiten.Streaming exec.Command StdoutPipe
Hier ist, was ich derzeit haben:.
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')
}
Ich würde erwarten, dass diese 0 bis 10 aus den Zahlen drucken, aber es scheint auf der Linie 3 (den ersten Aufruf von ReadString
mir hängen gestartet mit cmd.Output()
und cmd.CombinedOutput()
, aber diese Methoden scheinen den gesamten Ausgabestrom zu puffern, bis der Befehl abgeschlossen ist.Ich muss die Ausgabe verarbeiten, wie es Streams, nicht warten, bis der Befehl abgeschlossen ist.
Ich habe das auch versucht: continuously reading from exec.Cmd output, aber es schien nicht zu funktionieren und ich ging davon weg, weil ich wirklich Zeilen lesen möchte und den Puffer nicht manuell verwalten muss.
Andere Dinge, die ich sah durch:
- https://groups.google.com/forum/#!topic/golang-nuts/0xK_IHbHPUU
- https://golang.org/pkg/os/exec/
- https://golang.org/pkg/bufio/
Vermutlich versuchen Sie, etwas komplizierteres zu tun, aber wenn Sie nur die Ausgabe des Befehls in stdout kopieren möchten, weisen Sie os.Stdout einfach cmd.Stdout zu. – Peter
Ich habe etwas komplizierter als das getan, aber ich schätze den Tipp! Vielen Dank! – Joe