Sortie en direct des commandes exécutées
Cet extrait de code présente un problème souvent rencontré lors de l'exécution de commandes et de la récupération de leur sortie dans Go : la sortie devient disponible uniquement une fois l’exécution de la commande terminée. Pour résoudre ce problème, une solution modifiée est fournie qui permet la diffusion en direct de la sortie de la commande.
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 :
Notes supplémentaires :
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!