Maison >développement back-end >Golang >Comment diffuser la progression de la sortie d'une commande de longue durée dans Go ?
Progression de la sortie de la commande de streaming
Question :
Comment puis-je diffuser la sortie d'un long -commande en cours d'exécution, fournissant des mises à jour intermittentes plutôt qu'une finale résultat ?
Réponse :
Utiliser la fonction bufio.NewScanner() avec bufio.ScanLines() vous permet de lire la sortie d'une commande ligne par ligne , diffusant les résultats dès qu'ils sont disponibles. Vous trouverez ci-dessous un exemple modifié basé sur le code fourni :
func main() { cmd := exec.Command("go", "run", "child_process.go") stdout, _ := cmd.StdoutPipe() cmd.Start() scanner := bufio.NewScanner(stdout) for scanner.Scan() { fmt.Println(scanner.Text()) log.Printf(scanner.Text()) } cmd.Wait() }
Pour que cela fonctionne efficacement, la commande exécutée doit afficher la progression à l'aide de fmt.Println() ou log.Printf().
Pièges possibles :
Solutions alternatives :
Dans les cas où les caractères de nouvelle ligne ne sont pas fiables, des méthodes alternatives peuvent être employé :
Attention :
La lecture par octet ou par rune peut introduire des problèmes avec le multi-octet Caractères codés en UTF-8. Un tampon suffisamment grand pour capturer les runes UTF-8 doit être utilisé.
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!