確定Go 的os/exec 套件中的退出代碼
在Go 中,os/exec 套件提供了執行系統指令的便捷機制。然而,獲取已執行命令的退出代碼可能有點棘手。
問題
Command.Run() 和 Command.Output() 方法確實不提供對退出程式碼的直接存取。雖然 Command.Wait() 將傳回非零退出代碼的錯誤,但此錯誤不包括特定的退出代碼值。
跨平台解決方案
不幸的是,沒有用於檢索退出程式碼的與平台無關的 API。但是,對於 Linux 系統,可以使用以下方法:
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) } }
在此解決方案中,我們依賴 os/exec 套件中提供的非標準 ExitError 結構。透過檢查它是否存在,我們可以存取 ExitCode() 方法來檢索退出程式碼。
限制
請注意,此方法特定於 Linux,可能會不適用於其他平台。請參閱 os/exec 套件文件以取得替代方法或查閱特定於平台的資源。
以上是如何可靠地從 Go 的 os/exec 套件中檢索退出程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!