Maison >développement back-end >Golang >Comment puis-je récupérer de manière fiable les codes de sortie du package os/exec de Go ?

Comment puis-je récupérer de manière fiable les codes de sortie du package os/exec de Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-31 01:37:08815parcourir

How Can I Reliably Retrieve Exit Codes from Go's os/exec Package?

Détermination des codes de sortie dans le package os/exec de Go

Dans Go, le package os/exec fournit un mécanisme pratique pour exécuter des commandes système. Cependant, obtenir le code de sortie d'une commande exécutée peut être un peu délicat.

Le problème

Les méthodes Command.Run() et Command.Output() le font ne fournit pas d’accès direct au code de sortie. Bien que Command.Wait() renvoie une erreur pour les codes de sortie non nuls, cette erreur n'inclut pas la valeur spécifique du code de sortie.

Une solution multiplateforme

Malheureusement, il n'existe pas d'API indépendante de la plate-forme pour récupérer les codes de sortie. Cependant, pour les systèmes Linux, l'approche suivante peut être utilisée :

import (
    "syscall"
)

...

// Attempt to execute the command
if err := cmd.Start(); err != nil {
    log.Fatalf("cmd.Start: %v", err)
}

// Wait for the command to complete
if err := cmd.Wait(); err != nil {
    if exitErr, ok := err.(*exec.ExitError); ok {
        // Convert exit status to an integer
        exitStatus := exitErr.ExitCode()
        log.Printf("Exit Status: %d", exitStatus)
    } else {
        log.Fatalf("cmd.Wait: %v", err)
    }
}

Dans cette solution, nous nous appuyons sur une structure ExitError non standard disponible dans le package os/exec. En vérifiant sa présence, on peut accéder à la méthode ExitCode() pour récupérer le code de sortie.

Limitations

Veuillez noter que cette approche est spécifique à Linux et peut ne fonctionne pas sur d'autres plateformes. Reportez-vous à la documentation du package os/exec pour connaître les méthodes alternatives ou consultez les ressources spécifiques à la plate-forme.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn