Redirection de la sortie d'exécution vers Logger dans Go
Dans Go, le package exec fournit des mécanismes pour exécuter des commandes externes. Bien que la méthode CombinedOutput puisse capturer l'intégralité du résultat une fois la commande terminée, elle peut ne pas convenir aux processus de longue durée ou inachevés.
Pour rediriger la sortie d'une commande vers un enregistreur en temps réel, un plus une approche flexible est nécessaire. Une technique consiste à utiliser un canal pour connecter la sortie de la commande au logger.
Voici un exemple d'extrait de code :
import ( "bufio" "log" "os/exec" ) func main() { cmd := exec.Command("yes") // Create a pipe to connect the command's stdout to the logger stdout, err := cmd.StdoutPipe() if err != nil { log.Fatalf("Failed to create stdout pipe: %v", err) } // Start the command if err := cmd.Start(); err != nil { log.Fatalf("Failed to start command: %v", err) } // Create a buffered reader to read the output line by line in := bufio.NewScanner(stdout) // Read the output and log it in real-time for in.Scan() { log.Printf(in.Text()) } if err := in.Err(); err != nil { log.Printf("Error reading command output: %v", err) } }
Dans cet exemple, le flux Stderr peut également être géré simultanément en créant un goroutine séparé. En acheminant la sortie de la commande vers l'enregistreur, les développeurs peuvent capturer et enregistrer sa sortie en temps réel, ce qui facilite la surveillance et le dépannage des processus dans leurs applications.
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!