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

Patricia Arquette
Freigeben: 2024-11-04 01:12:02
Original
470 Leute haben es durchsucht

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>
Nach dem Login kopieren

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!