Maison >développement back-end >Golang >Comment réaliser une capture Stdout en temps réel pour l'exécution de scripts dans un chatbot ?

Comment réaliser une capture Stdout en temps réel pour l'exécution de scripts dans un chatbot ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 07:50:30262parcourir

How to Achieve Real-Time Stdout Capture for Script Execution in a Chat Bot?

Exécuter des commandes avec Real-Time Stdout Capture

Afin d'améliorer les fonctionnalités d'un chatbot, l'objectif est de lui permettre de exécutez des scripts et diffusez la sortie standard directement dans le chat. Cependant, l'implémentation actuelle stocke l'intégralité de la sortie standard jusqu'à la conclusion du script. Pour résoudre ce problème, nous recherchons une solution qui fournit une sortie en temps réel.

Le code actuel utilise la fonction runcommand pour exécuter des scripts et renvoyer leur Stdout. Pour mettre en œuvre une sortie en temps réel, nous devons découpler les processus d’exécution et de sortie. Modifions le code pour résoudre ce problème :

<code class="go">func reboot(command *bot.Cmd) (string, error) {
    n := command.Args[0]
    go runcommand(n)
    return "", nil
}</code>

La fonction de redémarrage mise à jour lance la fonction runcommand en tant que goroutine. Cela permet à l'exécution du script de se produire simultanément avec les interactions du chatbot.

<code class="go">func runcommand(server string) {
    cmd := exec.Command("/bin/bash", "-c", "python test.py %s", server)
    cmdReader, err := cmd.StdoutPipe()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
        return
    }

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

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

La fonction runcommand modifiée utilise désormais un scanner pour surveiller en permanence la sortie standard du script. Toute sortie est immédiatement imprimée, permettant une capture de la sortie standard en temps réel.

Grâce à ces modifications, le chatbot peut exécuter efficacement des scripts et diffuser leur sortie stdout dans le chat en temps réel, offrant ainsi une expérience utilisateur amélioré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