Problem:
Wie kann das beim Ausführen eines Prozesses mit exec.Command erfolgen? Sie leiten die Ausgabe an Ihr Login weiter Echtzeit?
Kontext:
Der herkömmliche Ansatz, auf den Abschluss des Prozesses zu warten und dann seine kombinierte Ausgabe zu protokollieren, ist nicht für lang laufende oder unvollendete Prozesse geeignet . Das Schreiben auf stdout in Echtzeit ist auch für Dienste, die keine Terminals verwenden, nicht hilfreich.
Lösung:
Um Prozessausgaben in Echtzeit zu erfassen und zu protokollieren , können Sie Pipes verwenden:
stdout, err := cmd.StdoutPipe() if err != nil { return 0, err } // Start the command after setting up the pipe if err := cmd.Start(); err != nil { return 0, err } // Read the command's stdout line by line in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) // Log each line } if err := in.Err(); err != nil { log.Printf("error: %s", err) }
Dieser Ansatz ermöglicht es Ihnen, sowohl stdout als auch stderr mithilfe einer Goroutine zu erfassen.
Das obige ist der detaillierte Inhalt vonWie leite ich die Exec-Befehlsausgabe in Echtzeit in Golang in Ihr Protokoll um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!