2016-05-04 10 views
2

Ich habe diesen Code, den ich auch die volle Leistung von cmd.Stdout bekommen möchte, wenn seine für Textextraktion durchgeführt, usw.Wie bekomme ich vollen Stdout von exec.Command?

func main() { 
    cmd := exec.Command("readinggame") 
    cmd.Stdout = os.Stdout 
    cmd.Run() 
} 

Ich kann keinen Weg, um die Ausgabe entweder als []byte scheinen zu finden, oder string wenn es fertig ist. BTW Ich will nicht mit ReadLine (oder etwas ähnlichem) über den Ausgang Iterieren sein, die gut funktionieren passiert, ich habe gerade eine volle Leistung bei einem gehen will, so etwas wie

var out bytes.Buffer 
cmd.Stdout = &out 
if err := cmd.Run(); err != nil { 
    log.Fatal(err) 
} 
fmt.Println(out.String()) 
+0

Was ist falsch mit der Verwendung der bytes.Buffer? Warum nicht 'cmd.Output' oder' cmd.CombinedOutput' verwenden? – JimB

+0

Mit dem 'Bytes.Buffer' ist der Fehler, dass ich nichts aus' cmd.Stdout' bekommen kann, da ich bereits alle Daten zu 'os.Stdout' gestreamt habe. Ich kann 'cmd.Output' bcos nicht verwenden. Ich möchte die Ausgabe im Fall einer lang laufenden Anwendung auf den' os.Stdout' streamen –

Antwort

3

Das ist genau das erwartete Ergebnis ... alles, was benötigt wurde, war io.MultiWriter.

func main() { 

    cmd := exec.Command("ping", "google.com") 

    var out bytes.Buffer 
    multi := io.MultiWriter(os.Stdout, &out) 
    cmd.Stdout = multi 

    if err := cmd.Run(); err != nil { 
     log.Fatalln(err) 
    } 

    fmt.Printf("\n*** FULL OUTPUT *** %s\n", out.String()) 

} 
Verwandte Themen