ホームページ > バックエンド開発 > Golang > Go の os/exec パッケージから終了コードを確実に取得するにはどうすればよいですか?

Go の os/exec パッケージから終了コードを確実に取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-31 01:37:08
オリジナル
818 人が閲覧しました

How Can I Reliably Retrieve Exit Codes from Go's os/exec Package?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート