Bestimmen von Exit-Codes im os/exec-Paket von Go
In Go bietet das os/exec-Paket einen praktischen Mechanismus zum Ausführen von Systembefehlen. Allerdings kann es etwas schwierig sein, den Exit-Code eines ausgeführten Befehls zu erhalten.
Das Problem
Die Methoden Command.Run() und Command.Output() tun dies Bietet keinen direkten Zugriff auf den Exit-Code. Während Command.Wait() einen Fehler für Exit-Codes ungleich Null zurückgibt, enthält dieser Fehler nicht den spezifischen Exit-Code-Wert.
Eine plattformübergreifende Lösung
Leider gibt es keine plattformunabhängige API zum Abrufen von Exit-Codes. Für Linux-Systeme kann jedoch der folgende Ansatz verwendet werden:
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) } }
Bei dieser Lösung verlassen wir uns auf eine nicht standardmäßige ExitError-Struktur, die im Paket os/exec verfügbar ist. Indem wir prüfen, ob es vorhanden ist, können wir auf die ExitCode()-Methode zugreifen, um den Exit-Code abzurufen.
Einschränkungen
Bitte beachten Sie, dass dieser Ansatz spezifisch für Linux ist und möglicherweise Funktioniert nicht auf anderen Plattformen. Informationen zu alternativen Methoden finden Sie in der Dokumentation des OS/Exec-Pakets oder konsultieren Sie plattformspezifische Ressourcen.
Das obige ist der detaillierte Inhalt vonWie kann ich Exit-Codes zuverlässig aus dem os/exec-Paket von Go abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!