[解決済み] 終了コードを取得する - Go
2023-06-28 16:13:47
質問
os/exec パッケージを使用しています。 http://golang.org/pkg/os/exec/ を使用してオペレーティングシステムでコマンドを実行していますが、終了コードを取得する方法が見つからないようです。私は出力を読むことができるけれども
ie。
package main
import(
"os/exec"
"bytes"
"fmt"
"log"
)
func main() {
cmd := exec.Command("somecommand", "parameter")
var out bytes.Buffer
cmd.Stdout = &out
if err := cmd.Run() ; err != nil {
//log.Fatal( cmd.ProcessState.Success() )
log.Fatal( err )
}
fmt.Printf("%q\n", out.String() )
}
どのように解決するのですか?
終了コードが0なのか、それ以外なのかを判断するのは簡単です。最初のケースでは
cmd.Wait()
は nil を返します (パイプのセットアップ中に他のエラーがない限り)。
残念ながら、エラー時の終了コードを取得するためのプラットフォームに依存しない方法はありません。これがAPIの一部でない理由でもあります。以下のスニペットはLinuxで動作しますが、他のプラットフォームではテストしていません。
package main
import "os/exec"
import "log"
import "syscall"
func main() {
cmd := exec.Command("git", "blub")
if err := cmd.Start(); err != nil {
log.Fatalf("cmd.Start: %v", err)
}
if err := cmd.Wait(); err != nil {
if exiterr, ok := err.(*exec.ExitError); ok {
// The program has exited with an exit code != 0
// This works on both Unix and Windows. Although package
// syscall is generally platform dependent, WaitStatus is
// defined for both Unix and Windows and in both cases has
// an ExitStatus() method with the same signature.
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
log.Printf("Exit Status: %d", status.ExitStatus())
}
} else {
log.Fatalf("cmd.Wait: %v", err)
}
}
}
関連
-
[解決済み] response.Bodyを閉じないとどうなりますか?
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] Goを使って大きなファイルを効率よくダウンロードするにはどうしたらいいですか?
-
[解決済み] Goでスライスを逆に反復処理する方法はありますか?
-
[解決済み] マップから構造体への変換
-
[解決済み] テンプレートでマップを繰り返し処理する
-
[解決済み] 空のスライスをチェックするにはどうしたらいいですか?
-
[解決済み] Go で要件をインストールするにはどうすればよいですか? "パッケージが見つかりません"
-
[解決済み] env varが空の場合、どのようにデフォルト値を割り当てるのですか?
-
[解決済み] go.sum ファイルは git リポジトリにチェックインする必要がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン