首頁 > 後端開發 > Golang > 為什麼我的 Go 程式碼在使用 exec.Command 時回傳「退出狀態 1」?

為什麼我的 Go 程式碼在使用 exec.Command 時回傳「退出狀態 1」?

Mary-Kate Olsen
發布: 2024-11-24 04:24:15
原創
951 人瀏覽過

Why Does My Go Code Return

調試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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板