Maison >développement back-end >Golang >Comment rediriger la sortie d'exécution vers un enregistreur en temps réel dans Go ?

Comment rediriger la sortie d'exécution vers un enregistreur en temps réel dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 01:59:021016parcourir

How to Redirect Execution Output to a Logger in Real-time in Go?

Redirection de la sortie d'exécution vers Logger dans Go

Dans Go, le package exec fournit des mécanismes pour exécuter des commandes externes. Bien que la méthode CombinedOutput puisse capturer l'intégralité du résultat une fois la commande terminée, elle peut ne pas convenir aux processus de longue durée ou inachevés.

Pour rediriger la sortie d'une commande vers un enregistreur en temps réel, un plus une approche flexible est nécessaire. Une technique consiste à utiliser un canal pour connecter la sortie de la commande au logger.

Voici un exemple d'extrait de code :

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

func main() {
    cmd := exec.Command("yes")

    // Create a pipe to connect the command's stdout to the logger
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        log.Fatalf("Failed to create stdout pipe: %v", err)
    }

    // Start the command
    if err := cmd.Start(); err != nil {
        log.Fatalf("Failed to start command: %v", err)
    }

    // Create a buffered reader to read the output line by line
    in := bufio.NewScanner(stdout)

    // Read the output and log it in real-time
    for in.Scan() {
        log.Printf(in.Text())
    }

    if err := in.Err(); err != nil {
        log.Printf("Error reading command output: %v", err)
    }
}

Dans cet exemple, le flux Stderr peut également être géré simultanément en créant un goroutine séparé. En acheminant la sortie de la commande vers l'enregistreur, les développeurs peuvent capturer et enregistrer sa sortie en temps réel, ce qui facilite la surveillance et le dépannage des processus dans leurs applications.

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