Maison  >  Article  >  développement back-end  >  Comment rediriger la sortie d'une commande vers une connexion en temps réel dans Golang ?

Comment rediriger la sortie d'une commande vers une connexion en temps réel dans Golang ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-12 13:38:02590parcourir

How to Redirect Command Output to a Log in Real-Time in Golang?

Redirection de la sortie de la commande vers la connexion Golang

Lors de l'exécution d'une commande à l'aide de la fonction exec.Command, il est souvent souhaitable de rediriger la sortie vers un journal pour de vrai- surveillance du temps. Bien que CombinedOutput puisse capturer l'intégralité de la sortie une fois la commande terminée, elle ne convient pas aux processus de longue durée ou inachevés.

Une solution courante pour la redirection de sortie en temps réel consiste à attribuer directement stdout et stderr aux flux de sortie du système. (os.Stdout et os.Stderr). Cependant, cela peut ne pas être pratique pour les applications qui n'écrivent pas sur un terminal.

Solution utilisant des tuyaux

Pour rediriger la sortie de la commande vers un journal, vous pouvez utiliser des tuyaux . Voici un exemple :

stdout, err := cmd.StdoutPipe()
if err != nil {
    return nil, err
}

// Start the command with the pipe in place
if err := cmd.Start(); err != nil {
    return nil, err
}

// Real-time monitoring of stdout
in := bufio.NewScanner(stdout)

for in.Scan() {
    log.Printf(in.Text()) // Write line to log or perform other operations
}
if err := in.Err(); err != nil {
    log.Printf("Error: %s", err)
}

Considérations

Cette méthode gère stdout, mais vous pouvez également gérer stderr en créant un tube et une goroutine séparés. De plus, vous devrez peut-être gérer l'annulation de contexte ou d'autres cas extrêmes pour garantir un nettoyage et une gestion des ressources appropriés.

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