Wenn Sie das os/exec-Paket zum Ausführen eines Befehls verwenden, kann es vorkommen, dass Sie häufig auf die Sorge stoßen, den Exit-Code zu erhalten. Während die Dokumentation die Process.Success()-Methode bereitstellt, um anzuzeigen, ob der Prozess ohne Fehler beendet wurde, bietet sie keine explizite Möglichkeit, den tatsächlichen Exit-Code abzurufen.
Eine Problemumgehung zum Abrufen des Exit-Codes für Linux: basierten Systemen besteht darin, das Syscall-Paket zu nutzen. Hier ist ein verbesserter Codeausschnitt:
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) } } }
Dieser Ansatz verwendet den WaitStatus-Typ aus dem Syscall-Paket, das eine ExitStatus()-Methode enthält, um den Exit-Code für Prozesse abzurufen, die unter Linux und anderen UNIX-ähnlichen Betriebssystemen ausgeführt werden .
Für Windows-Systeme funktioniert diese Methode nicht, da sie nicht das gleiche Konzept von Exit-Codes bietet. Stattdessen können Sie sich für alternative Ansätze entscheiden, wie z. B. die Verwendung der /c-Option von cmd.exe, um einen Befehl auszuführen und die Ausgabe auf Fehlercodes zu analysieren.
Durch die Anpassung dieser Techniken basierend auf Ihrem Betriebssystem können Sie die effektiv abrufen Exit-Code externer Befehle, die über das os/exec-Paket in Go ausgeführt werden.
Das obige ist der detaillierte Inhalt vonWie rufe ich den Exit-Code von „os/exec' in Go ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!