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 中国語 Web サイトの他の関連記事を参照してください。