ホームページ >バックエンド開発 >Golang >Go プログラムの「exec.Command」がターミナルでは失敗するのに、コンソールでは成功するのはなぜですか?

Go プログラムの「exec.Command」がターミナルでは失敗するのに、コンソールでは成功するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 01:52:10141ブラウズ

Why Does My Go Program's `exec.Command` Fail in the Terminal But Succeed in the Console?

引数を指定したコマンドの呼び出し: コンソール成功、ターミナル失敗

このシナリオでは、Go プログラムは 2 つの引数 ( -n 10 および -l 2)、10 個のプロセスの詳細を表示します。ただし、追加の引数 (-o cpu) を追加すると、「無効な引数 -o」というエラーが発生します。

問題

このエラーは、ターミナルから完全な引数リスト (-o cpu -n 10 -l 2) を指定して top コマンドを実行します。ただし、同じコマンドをコンソールから実行すると、期待どおりに機能します。

根本原因

この問題は、オペレーティング システムによる引数の解析方法に起因します。通常、コンソールからコマンドを実行する場合、各引数はスペースで区切られます。ただし、Go プログラムでは、引数は単一の文字列として渡されます。これにより、オペレーティング システムが引数を解釈することになりますが、この場合は解釈が間違っています。

解決策

この問題を解決するには、引数を別のものとして渡す必要があります。文字列を exec.Command 関数に渡します。次のコードは、これを行う正しい方法を示しています。

import (
    "os/exec"
)

func main() {
    app := "/usr/bin/top"

    cmd := exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")
    out, err := cmd.CombinedOutput()

    // Error handling omitted for brevity
    value := string(out)
    return value
}

各引数を個別の文字列として渡すことにより、オペレーティング システムはコマンドを正しく解釈し、意図したとおりに実行できます。これによりエラーが解決され、プログラムは追加の引数 (-o cpu) を使用して 10 個のプロセスの詳細を正常に表示できるようになります。

以上がGo プログラムの「exec.Command」がターミナルでは失敗するのに、コンソールでは成功するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。