調試Go 的exec.Command 中的「退出狀態1」錯誤
執行外部命令時遇到神秘的「退出狀態1 」錯誤使用Golang 的exec.Command,找出確切原因可能是一項艱鉅的任務。本簡短指南將提供有效排除錯誤的見解。
使用 Stderr 增強錯誤訊息
預設情況下,exec.Command 僅擷取標準輸出 (stdout)執行指令。若要檢索更詳細的錯誤訊息,您可以利用 exec.Command 結構的 Stderr 屬性。具體方法如下:
cmd := exec.Command("find", "/", "-maxdepth", "1", "-exec", "wc", "-c", "{}", "\") var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr
現在,當執行命令並發生錯誤時,錯誤訊息將寫入 stderr 緩衝區,而不是通用的「退出狀態 1」。
範例
考慮以下程式碼snippet:
cmd := exec.Command("find", "/", "-maxdepth", "1", "-exec", "wc", "-c", "{}", "\") var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr err := cmd.Run() if err != nil { fmt.Println(fmt.Sprint(err) + ": " + stderr.String()) return } fmt.Println("Result: " + out.String())
執行後,程式碼會顯示以下詳細錯誤訊息:
exit status 1: find: -exec: no terminating ";" or "+"
其他注意事項
值得注意某些指令可能不遵守將錯誤寫入stderr 的約定。某些指令可能會將錯誤列印到 stdout,而其他指令可能會將錯誤列印到 stderr,但仍傳回成功退出狀態 (0)。因此,可能需要調整程式碼以滿足您正在執行的特定命令。
以上是為什麼我的 Go 程式碼在使用 exec.Command 時回傳「退出狀態 1」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!