Problème :
Lors de l'exécution d'un processus à l'aide de exec.Command, comment peut-on vous redirigez sa sortie vers votre journal en temps réel ?
Contexte :
L'approche conventionnelle consistant à attendre la fin du processus, puis à enregistrer sa sortie combinée n'est pas adapté aux processus de longue durée ou inachevés. Écrire sur la sortie standard en temps réel n'est pas non plus utile pour les services qui n'utilisent pas de terminaux.
Solution :
Pour capturer et enregistrer la sortie du processus en temps réel , vous pouvez utiliser des tuyaux :
stdout, err := cmd.StdoutPipe() if err != nil { return 0, err } // Start the command after setting up the pipe if err := cmd.Start(); err != nil { return 0, err } // Read the command's stdout line by line in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) // Log each line } if err := in.Err(); err != nil { log.Printf("error: %s", err) }
Cette approche vous permet de capturer à la fois stdout et stderr en utilisant une goroutine.
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!