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