Maison >développement back-end >Golang >Comment rediriger la sortie de la commande Exec vers votre connexion en temps réel dans Golang ?

Comment rediriger la sortie de la commande Exec vers votre connexion en temps réel dans Golang ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-17 12:38:01549parcourir

How to Redirect Exec Command Output to Your Log in Real Time in Golang?

Golang : copie de la sortie Exec dans le journal

Problème :

Lors de l'exécution d'un processus à l'aide de exec.Command, comment peut-on vous redirigez sa sortie vers votre journal en temps réel ?

Contexte :

L'approche conventionnelle consistant à attendre la fin du processus, puis à enregistrer sa sortie combinée n'est pas adapté aux processus de longue durée ou inachevés. Écrire sur la sortie standard en temps réel n'est pas non plus utile pour les services qui n'utilisent pas de terminaux.

Solution :

Pour capturer et enregistrer la sortie du processus en temps réel , vous pouvez utiliser des tuyaux :

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

// Start the command after setting up the pipe
if err := cmd.Start(); err != nil {
    return 0, err
}

// Read the command's stdout line by line
in := bufio.NewScanner(stdout)

for in.Scan() {
    log.Printf(in.Text()) // Log each line
}

if err := in.Err(); err != nil {
    log.Printf("error: %s", err)
}

Cette approche vous permet de capturer à la fois stdout et stderr en utilisant une goroutine.

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