Maison >développement back-end >Golang >Comment capturer le résultat d'une commande en temps réel à partir d'un chatbot ?

Comment capturer le résultat d'une commande en temps réel à partir d'un chatbot ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 04:50:30691parcourir

How to Capture Command Output in Real Time from a Chat Bot?

Comment capturer le résultat d'une exécution de commande en temps réel

Problème :

Quand lors de l'exécution de commandes à partir d'un chatbot, la sortie stdout est renvoyée en une seule fois à la fin de la commande. Pour obtenir une sortie en temps réel, il est nécessaire de modifier son exécution pour écrire en temps réel.

Solution proposée :

La fonction fournie collecte la sortie stdout en même temps et le renvoie une fois terminé. Nous pouvons améliorer cela en utilisant un canal pour capturer la sortie en temps réel.

Mise en œuvre :

<code class="go">package main

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

func main() {
    cmd := exec.Command("tail", "-f",  "/usr/local/var/log/redis.log")

    // create a pipe for the output of the script
    cmdReader, err := cmd.StdoutPipe()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
        return
    }

    scanner := bufio.NewScanner(cmdReader)
    go func() {
        for scanner.Scan() {
            fmt.Printf("\t > %s\n", scanner.Text())
        }
    }()

    err = cmd.Start()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error starting Cmd", err)
        return
    }

    err = cmd.Wait()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err)
        return
    }
}</code>

En utilisant cette approche, la sortie standard de l'exécution La commande sera diffusée sur le canal de discussion en temps réel, permettant un retour immédiat et une communication interactive.

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