Wie leite ich die Befehlsausgabe in Echtzeit in Golang in ein Protokoll um?

Mary-Kate Olsen
Freigeben: 2024-11-12 13:38:02
Original
584 Leute haben es durchsucht

How to Redirect Command Output to a Log in Real-Time in Golang?

Befehlsausgabe an Log in Golang umleiten

Beim Ausführen eines Befehls mit der exec.Command-Funktion ist es oft wünschenswert, die Ausgabe in ein Protokoll umzuleiten, damit Zeitüberwachung. CombinedOutput kann zwar die gesamte Ausgabe erfassen, sobald der Befehl abgeschlossen ist, eignet sich jedoch nicht für Prozesse mit langer Laufzeit oder nicht abgeschlossenen Prozessen.

Eine gängige Lösung für die Ausgabeumleitung in Echtzeit besteht darin, stdout und stderr direkt den Systemausgabestreams zuzuweisen (os.Stdout und os.Stderr). Dies ist jedoch möglicherweise nicht praktikabel für Anwendungen, die nicht in ein Terminal schreiben.

Lösung mit Pipes

Um die Befehlsausgabe in ein Protokoll umzuleiten, können Sie Pipes verwenden . Hier ist ein Beispiel:

stdout, err := cmd.StdoutPipe()
if err != nil {
    return nil, err
}

// Start the command with the pipe in place
if err := cmd.Start(); err != nil {
    return nil, err
}

// Real-time monitoring of stdout
in := bufio.NewScanner(stdout)

for in.Scan() {
    log.Printf(in.Text()) // Write line to log or perform other operations
}
if err := in.Err(); err != nil {
    log.Printf("Error: %s", err)
}
Nach dem Login kopieren

Überlegungen

Diese Methode verarbeitet stdout, aber Sie können stderr auch verwalten, indem Sie eine separate Pipe und Goroutine erstellen. Darüber hinaus müssen Sie möglicherweise die Kontextaufhebung oder andere Grenzfälle bewältigen, um eine ordnungsgemäße Bereinigung und Ressourcenverwaltung sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie leite ich die Befehlsausgabe in Echtzeit in Golang in ein Protokoll um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage