引数を使用したコマンドの呼び出し: エラーのトラブルシューティング
Go で exec.Command 関数を使用して引数を使用してコマンドを実行しようとすると、開発者は次のような問題を引き起こす可能性があります。特定の引数は受け入れられるが、他の引数は受け入れられないという矛盾が発生する
そのような例の 1 つが次のコードです。
package main import ( "os/exec" ) func main() { print(top()) } func top() string { app := "/usr/bin/top" cmd := exec.Command(app, "-n 10", "-l 2") out, err := cmd.CombinedOutput() if err != nil { return err.Error() + " " + string(out) } value := string(out) return value }
このコードは、10 個のプロセスの詳細を正常に出力します。ただし、追加の引数「-o cpu」を追加すると (例: cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2"))、次のエラーが発生します。
exit status 1 invalid argument -o: cpu /usr/bin/top usage: /usr/bin/top [-a | -d | -e | -c <mode>] [-F | -f] [-h] [-i <interval>] [-l <samples>] [-ncols <columns>] [-o <key>] [-O <secondaryKey>] [-R | -r] [-S] [-s <delay>] [-n <nprocs>] [-stats <key(s)>] [-pid <processid>] [-user <username>] [-U <username>] [-u]
このエラーは、コマンド「top -o cpu -n 10 -l 2」が機能するにもかかわらず発生します。 console.
解決策:
この問題を解決する鍵は、引数を分離することです。シェルでは、通常、コマンドと引数はスペースで区切られます。ただし、exec.Command を使用する場合は、各引数を個別の文字列として渡す必要があります。
exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")
この方法で引数を渡すことにより、プログラムはコマンドとその引数を正しく解釈します。これにより、引数が 1 つの文字列に結合されるときに発生するエラー (例: "-o cpu") が防止されます。
以上がコンソールでは同じコマンドが機能するのに、Go `exec.Command` が特定の引数で失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。