Maison > développement back-end > Golang > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-12 13:38:02
original
584 Les gens l'ont consulté

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal