Maison > développement back-end > Golang > Comment diffuser la sortie d'une commande dans Go pour des résultats en direct ?

Comment diffuser la sortie d'une commande dans Go pour des résultats en direct ?

Mary-Kate Olsen
Libérer: 2024-11-20 13:32:17
original
430 Les gens l'ont consulté

How to Stream Command Output in Go for Live Results?

Diffusion de la sortie des commandes pour les résultats en direct

L'exécution de commandes dans Go vous permet d'interagir avec des processus externes, mais si vous avez besoin de la sortie en temps réel, il existe un moyen pour y parvenir.

Dans votre extrait de code, la sortie est imprimée en une seule fois une fois la commande terminée. Pour afficher la sortie en direct, vous pouvez intégrer la technique décrite ci-dessous :

// ... Previous code

for _, cp := range cmdParams {
    log.Printf("Starting %s in folder %s...", cp[1:], cp[0])
    cmd := exec.Command(cp[1], cp[2:]...)
    cmd.Dir = cp[0]

    stdout, err := cmd.StdoutPipe()
    if err != nil {
        log.Printf("%s cmd.StdoutPipe() error: %v\n", cp[1:], err)
        return
    }
    // Start command:
    if err = cmd.Start(); err != nil {
        log.Printf("%s start error: %v\n", cp[1:], err)
        return
    }

    // Stream command output:
    scanner := bufio.NewScanner(stdout)
    scanner.Split(bufio.ScanRunes)
    for scanner.Scan() {
        fmt.Print(scanner.Text())
    }
    if scanner.Err() != nil {
        log.Printf("Reading %s stdout error: %v\n", cp[1:], err)
        return
    }

    // Get execution success or failure:
    if err = cmd.Wait(); err != nil {
        log.Printf("Error running %s: %v\n", cp[1:], err)
        return
    }
    log.Printf("Finished %s", cp[1:])
}

// ... Remaining code
Copier après la connexion

Explication

Cette modification utilise un bufio.Scanner pour lire la sortie standard de la commande en temps réel. Le Split(bufio.ScanRunes) demande au scanner de lire des caractères individuels, ce qui vous permet d'afficher la sortie au fur et à mesure de sa génération.

En appelant à plusieurs reprises scanner.Scan() et en imprimant le scanner.Text() jusqu'à ce que la fin de la sortie est atteinte, vous pouvez diffuser la sortie de la commande en direct sur l'écran.

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