Heim  >  Artikel  >  Backend-Entwicklung  >  Wie leite ich die Exec-Befehlsausgabe in Echtzeit in Golang in Ihr Protokoll um?

Wie leite ich die Exec-Befehlsausgabe in Echtzeit in Golang in Ihr Protokoll um?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-17 12:38:01466Durchsuche

How to Redirect Exec Command Output to Your Log in Real Time in Golang?

Golang: Exec-Ausgabe in Protokoll kopieren

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!

Stellungnahme:
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