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!