ホームページ > バックエンド開発 > Golang > exec.Command を使用すると Go コードが「終了ステータス 1」を返すのはなぜですか?

exec.Command を使用すると Go コードが「終了ステータス 1」を返すのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-24 04:24:15
オリジナル
952 人が閲覧しました

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
ログイン後にコピー

コマンドが実行されてエラーが発生すると、エラー メッセージは一般的な「終了ステータス 1」の代わりに stderr バッファに書き込まれます。

次のコードを考えてみましょうスニペット:

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 "+"
ログイン後にコピー

追加の考慮事項

注目に値します一部のコマンドは、エラーを標準エラー出力に書き込む規則に従っていない可能性があります。コマンドによってはエラーを stdout に出力する場合もあれば、エラーを stderr に出力しても成功終了ステータス (0) を返すコマンドもあります。したがって、実行する特定のコマンドに合わせてコードを調整する必要がある場合があります。

以上がexec.Command を使用すると Go コードが「終了ステータス 1」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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