Maison >développement back-end >Golang >Comment récupérer la sortie en temps réel des commandes Shell dans Go ?

Comment récupérer la sortie en temps réel des commandes Shell dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 02:56:09262parcourir

How to Retrieve Realtime Output from Shell Commands in Go?

Récupérer la sortie en temps réel des commandes Shell dans Go

Problème :

Vous souhaitez exécuter commandes shell dans Go qui peuvent prendre du temps et récupérer leur sortie en temps réel pour la traiter et l'afficher au fur et à mesure de la progression informations.

Solution :

1. Utilisez os/exec pour l'exécution des commandes Shell :

Créez une commande à l'aide de exec.Command pour exécuter la commande Shell souhaitée.

2. Sortie de capture d'erreur standard (stderr) :

Par défaut, les messages de diagnostic des commandes shell sont envoyés à stderr au lieu de stdout. Utilisez cmd.StderrPipe() pour capturer le flux stderr.

3. Créer un scanner pour lire la sortie :

Utilisez bufio.NewScanner pour créer un scanner qui lit le flux stderr. Divisez l'analyse en mots à l'aide de bufio.ScanWords pour obtenir des lignes de sortie individuelles.

4. Traiter et afficher la sortie :

Dans une boucle, utilisez la méthode scanner.Scan() pour récupérer chaque ligne de sortie. Traitez-le pour extraire les informations souhaitées, telles que le taux de progression. Ensuite, affichez la sortie traitée.

5. Exemple de code :

Voici un exemple de code qui montre comment procéder :

package main

import (
    "bufio"
    "fmt"
    "os/exec"
    "strings"
)

func main() {
    args := "-i test.mp4 -acodec copy -vcodec copy -f flv rtmp://aaa/bbb"
    cmd := exec.Command("ffmpeg", strings.Split(args, " ")...)

    stderr, _ := cmd.StderrPipe()
    cmd.Start()

    scanner := bufio.NewScanner(stderr)
    scanner.Split(bufio.ScanWords)
    for scanner.Scan() {
        m := scanner.Text()
        fmt.Println(m)
    }
    cmd.Wait()
}

En suivant ces étapes, vous pouvez récupérer la sortie en temps réel des commandes et des processus du shell dessus pour afficher des informations de progression ou toute autre information souhaitée.

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