Maison  >  Article  >  développement back-end  >  Comment enregistrer et imprimer simultanément la sortie des commandes sur la console ?

Comment enregistrer et imprimer simultanément la sortie des commandes sur la console ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 01:12:02471parcourir

How to Simultaneously Log and Print Command Output to Console?

Console simultanée et sortie de journal pour les commandes Stdout et Stderr

Le but du code fourni est d'imprimer les commandes stdout et stderr sur la console en temps réel tout en les enregistrant simultanément dans un fichier dans l'ordre de la console, sans modifier la commande elle-même.

Pour y parvenir, nous pouvons utiliser le type io.MultiWriter. Voici comment :

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

En définissant multiWriter comme une combinaison du fichier journal et de la sortie standard, nous écrivons efficacement la sortie de la commande vers les deux destinations simultanément. cmd.Run() se bloque jusqu'à la fin de la commande, garantissant ainsi le maintien de l'ordre de sortie.

Cette solution satisfait à toutes les exigences :

  • Imprime stdout et stderr sur la console en temps réel.
  • Enregistre stdout et stderr dans un fichier, reflétant la sortie de la console.
  • Respecte l'ordre exact des écritures sur stdout et stderr.
  • Ne modifie pas la commande elle-même.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn