Maison >développement back-end >Golang >Comment récupérer le code de sortie de « os/exec » dans Go ?

Comment récupérer le code de sortie de « os/exec » dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-23 10:37:58454parcourir

How to Retrieve the Exit Code from `os/exec` in Go?

Comment obtenir le code de sortie dans Go

Lors de l'utilisation du package os/exec pour exécuter une commande, on peut rencontrer le souci courant d'obtenir le code de sortie. Bien que la documentation fournisse la méthode Process.Success() pour indiquer si le processus s'est terminé sans erreur, elle ne fournit pas de moyen explicite de récupérer le code de sortie réel.

Une solution de contournement pour acquérir le code de sortie pour Linux : les systèmes basés sur le système consistent à exploiter le package syscall. Voici un extrait de code amélioré :

package main

import (
    "log"
    "os/exec"
    "syscall"
)

func main() {
    cmd := exec.Command("somecommand", "parameter")
    if err := cmd.Run(); err != nil {
        if exiterr, ok := err.(*exec.ExitError); ok {
            // exiterr.Sys() is a syscall.WaitStatus.
            log.Printf("Exit Status: %d", exiterr.Sys().(syscall.WaitStatus).ExitStatus())
        } else {
            log.Fatalf("cmd.Run: %v", err)
        }
    }
}

Cette approche utilise le type WaitStatus du package syscall, qui contient une méthode ExitStatus() pour récupérer le code de sortie pour les processus exécutés sous Linux et d'autres systèmes d'exploitation de type UNIX. .

Pour les systèmes Windows, cette méthode ne fonctionnera pas car elle ne fournit pas le même concept de codes de sortie. Au lieu de cela, vous pouvez opter pour des approches alternatives telles que l'utilisation de l'option /c de cmd.exe pour exécuter une commande et analyser le résultat à la recherche de codes d'erreur.

En adaptant ces techniques en fonction de votre système d'exploitation, vous pouvez récupérer efficacement le code de sortie des commandes externes exécutées via le package os/exec dans Go.

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