引数を指定したコマンドの呼び出し: コンソール成功、ターミナル失敗
このシナリオでは、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 サイトの他の関連記事を参照してください。