2017-11-10 1 views
0

Ich möchte GO verwenden, um einen asynchronen Befehl auf Windows 10 auszuführen. Der Befehl, den ich ausgeführt habe, blockiert, und wenn direkt vom Terminal ausgeführt wird, bietet es eine konstante Dampf der Statusmeldungen bis Ctrl-cGo stdout Stream von Async-Befehl

Ich möchte diesen Befehl von GO über exec ausführen und fangen die Ausgabe von der Exec-Befehl in Echtzeit auf das Terminal, dh nicht nur, wenn die GO-Anwendung beendet.

Ich habe zahlreiche Beispiele ausprobiert, aber mit nicht erfolgreich, ich bekomme nur ein leeres Terminal und selbst nach dem Beenden der GO-Anwendung, sehe ich nicht die Ausgabe von dem Befehl, den ich ausgeführt habe.

Antwort

1

Sie können cmd.StdoutPipe verwenden, das zu tun:

cmd := exec.Command(cmdName, cmdArgs...) 
cmdReader, _ := cmd.StdoutPipe() 
scanner := bufio.NewScanner(cmdReader) 
go func() { 
    for scanner.Scan() { 
     fmt.Printf(scanner.Text()) 
    } 
}() 
cmd.Start() 
err = cmd.Wait() 
+0

Danke, ich dies ohne Glück bereits versucht hatte, dann nach ein bisschen mehr zu graben, fand ich die die Anwendung bei mir läuft auf Stderr ausgibt, so eine leichte Änderung für meine Umstände und das hat funktioniert. – PrestonDocks