os/exec パッケージを使用してコマンドを実行する場合、終了コードの取得に関する一般的な問題に遭遇することがあります。ドキュメントには、プロセスがエラーなしで終了したかどうかを示す Process.Success() メソッドが提供されていますが、実際の終了コードを取得する明示的な方法は提供されていません。
Linux の終了コードを取得する 1 つの回避策-ベースのシステムでは、syscall パッケージを利用します。改善されたコード スニペットは次のとおりです。
package main import ( "log" "os/exec" "syscall" ) func main() { cmd := exec.Command("somecommand", "parameter") if err := cmd.Run(); err != nil { if exiterr, ok := err.(*exec.ExitError); ok { // exiterr.Sys() is a syscall.WaitStatus. log.Printf("Exit Status: %d", exiterr.Sys().(syscall.WaitStatus).ExitStatus()) } else { log.Fatalf("cmd.Run: %v", err) } } }
このアプローチでは、syscall パッケージの WaitStatus タイプを使用します。これには、Linux およびその他の UNIX 系オペレーティング システムで実行されているプロセスの終了コードを取得する ExitStatus() メソッドが含まれています。 .
Windows システムの場合、このメソッドは終了コードの同じ概念を提供していないため機能しません。代わりに、cmd.exe の /c オプションを使用してコマンドを実行し、出力でエラー コードを解析するなどの代替アプローチを選択できます。
オペレーティング システムに基づいてこれらの手法を適応させることで、効果的にGo の os/exec パッケージを通じて実行される外部コマンドの終了コード。
以上がGo で `os/exec` から終了コードを取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。