我正在嘗試使用以下代碼行在 go 中運行命令。
cmd := exec.Command(shell, `-c`, unsliced_string)
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Run()
變數 shell 是從 os.Getenv("$SHELL") 收集的,變數 unsliced_string 是從命令列提供的引數。
運行后我需要命令的狀態/錯誤代碼。
因此,如果正在運行的命令(來自命令)是exit 100,我需要保存一個變數來保留錯誤狀態代碼,在這種情況下為 100
總的來說,我需要一個變數來記錄命令運行的錯誤代碼
我試過使用 .Error() 但是它有exit status 100而不是100
作為最后的手段我可以只使用 strings.Replaceall 或 strings.Trim
uj5u.com熱心網友回復:
當然,有兩種方法:
cmd := exec.Command(shell, `-c`, unsliced_string)
err := cmd.Run()
if exitErr, ok := err.(*exec.ExitError); ok {
exitCode := exitErr.ExitCode()
fmt.Println(exitCode)
} else if err != nil {
// another type of error occurred, should handle it here
// eg: if $SHELL doesn't point to an executable, etc...
}
cmd := exec.Command(shell, `-c`, unsliced_string)
_ := cmd.Run()
exitCode := cmd.ProcessState.ExitCode()
fmt.Println(exitCode)
我強烈建議使用第一個選項,這樣您就可以捕獲所有exec.ExitError's 并按照您想要的方式處理它們。此外,如果命令尚未退出或底層命令由于另一個錯誤而從未運行,則不會填充 cmd.ProcessState,因此使用第一個選項更安全。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400774.html
標籤:去
