Maison >développement back-end >Golang >Comment diffuser le résultat d'une commande en temps réel au lieu d'attendre la fin de l'exécution ?
Problème : affichage de sortie retardé
Actuellement, votre code traite une commande et n'affiche sa sortie qu'une fois l'exécution terminée. Vous recherchez une solution pour diffuser la sortie en direct au lieu d'attendre la fin du processus.
Solution : diffusion en continu de la sortie de commande
Utilisez l'approche suivante pour diffuser la commande sortie :
cmdParams := [][]string{ {filepath.Join(dir, path), "npm", "install"}, {filepath.Join(pdir, n.path), "gulp"}, } for _, cp := range cmdParams { log.Printf("Starting %s in folder %s...", cp[1:], cp[0]) cmd := exec.Command(cp[1], cp[2:]...) cmd.Dir = cp[0] stdout, err := cmd.StdoutPipe() if err != nil { log.Printf("%s cmd.StdoutPipe() error: %v\n", cp[1:], err) return } // Start command: if err = cmd.Start(); err != nil { log.Printf("%s start error: %v\n", cp[1:], err) return } // Stream command output: scanner := bufio.NewScanner(stdout) scanner.Split(bufio.ScanRunes) for scanner.Scan() { fmt.Print(scanner.Text()) } if scanner.Err() != nil { log.Printf("Reading %s stdout error: %v\n", cp[1:], err) return } // Get execution success or failure: if err = cmd.Wait(); err != nil { log.Printf("Error running %s: %v\n", cp[1:], err) return } log.Printf("Finished %s", cp[1:]) }
Explication
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!