Obtenir le code de sortie - Aller
Je suis à l'aide du package: os/exec http://golang.org/pkg/os/exec/ pour exécuter une commande dans le système d'exploitation, mais je ne semble pas trouver le moyen d'obtenir le code de sortie. Je peux lire la sortie si
ie.
package main
import(
"os/exec"
"bytes"
"fmt"
"log"
)
func main() {
cmd := exec.Command("somecommand", "parameter")
var out bytes.Buffer
cmd.Stdout = &out
if err := cmd.Run() ; err != nil {
//log.Fatal( cmd.ProcessState.Success() )
log.Fatal( err )
}
fmt.Printf("%q\n", out.String() )
}
Vous devez vous connecter pour publier un commentaire.
Il est facile de déterminer si le code de sortie est 0 ou quelque chose d'autre. Dans le premier cas,
cmd.Wait()
sera de retour néant (sauf si il y a une autre erreur lors de la configuration de canalisations).Malheureusement, il n'existe pas de plate-forme indépendante de façon à obtenir le code de sortie en cas d'erreur. C'est aussi la raison pour laquelle elle ne fait pas partie de l'API. L'extrait de code suivant va travailler avec Linux, mais je ne l'ai pas testé sur d'autres plates-formes:
Juste suivre l' api docs pour en savoir plus 🙂
ProcessState
àWaitStatus
comment avez-vous fait?. Aussi, je viens de trouver dans la liste de diffusion de la solution ( tout comme celui que vous avez décrit) groups.google.com/forum/?fromgroups#!searchin/golang-noix/... j'essaie maintenant dans les fenêtres et laissez vous savez 🙂if/if
dans un seul cas ( à l'aide d'un&&
ou quelque chose? )ProcessState
àWaitStatus
: vous pouvez soit utiliserfmt.Printf("%T\n", exiterr.Sys())
pour imprimer le type de la valeur, ou vous pouvez examiner les sources à golang.org/src/pkg.ExitStatus()
sur le revenuExitError
type serait une belle addition à os/exec...Voici ma version améliorée basée sur @tux21b 's réponse
utils/cmd.go
Je l'ai testé sur OSX, si ça ne fonctionne pas comme prévu sur d'autres plates-formes, veuillez me dire si nous pouvons faire mieux.
Depuis golang la version 1.12, le code de sortie est disponible en mode natif et en une croix-plate-forme de façon. Voir ExitError et ExitCode().