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!