Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich die Befehlsausgabe gleichzeitig in der Konsole protokollieren und drucken?

Wie kann ich die Befehlsausgabe gleichzeitig in der Konsole protokollieren und drucken?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 01:12:02471Durchsuche

How to Simultaneously Log and Print Command Output to Console?

Gleichzeitige Konsolen- und Protokollausgabe für Befehl Stdout und Stderr

Das Ziel des bereitgestellten Codes besteht darin, Befehle stdout und stderr auf der Konsole auszugeben in Echtzeit und protokollieren sie gleichzeitig in einer Datei in Konsolenreihenfolge, ohne den Befehl selbst zu ändern.

Um dies zu erreichen, können wir den Typ io.MultiWriter verwenden. So geht's:

<code class="go">package main

import (
    "io"
    "log"
    "os"
    "os/exec"
)

func main() {
    // Logging capability
    f, err := os.OpenFile("log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        log.Fatalf("Error opening file: %v", err)
    }
    defer f.Close()

    // Define a MultiWriter that includes both the log file and stdout
    multiWriter := io.MultiWriter(f, os.Stdout)

    // Set stdout and stderr of the command to the MultiWriter
    cmd := exec.Command("php", "randomcommand.php")
    cmd.Stdout = multiWriter
    cmd.Stderr = multiWriter

    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }
}</code>

Indem wir multiWriter als eine Kombination aus Protokolldatei und Standardausgabe definieren, schreiben wir die Befehlsausgabe effektiv an beide Ziele gleichzeitig. cmd.Run() blockiert, bis der Befehl abgeschlossen ist, und stellt sicher, dass die Ausgabereihenfolge beibehalten wird.

Diese Lösung erfüllt alle Anforderungen:

  • Druckt stdout und stderr in Echtzeit auf der Konsole.
  • Protokolliert stdout und stderr in einer Datei und spiegelt die Konsolenausgabe.
  • Respektiert die genaue Reihenfolge der Schreibvorgänge in stdout und stderr.
  • Ändert den Befehl selbst nicht.

Das obige ist der detaillierte Inhalt vonWie kann ich die Befehlsausgabe gleichzeitig in der Konsole protokollieren und drucken?. 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