ホームページ > バックエンド開発 > Golang > コンソールでは同じコマンドが機能するのに、Go `exec.Command` が特定の引数で失敗するのはなぜですか?

コンソールでは同じコマンドが機能するのに、Go `exec.Command` が特定の引数で失敗するのはなぜですか?

DDD
リリース: 2024-12-24 00:59:10
オリジナル
823 人が閲覧しました

Why Does My Go `exec.Command` Fail with Certain Arguments, While the Same Command Works in the Console?

引数を使用したコマンドの呼び出し: エラーのトラブルシューティング

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

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