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
Libérer: 2024-12-11 02:56:09
original
308 Les gens l'ont consulté

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

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!

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