使用參數呼叫指令:排除錯誤
當嘗試使用Go 中的exec.Command 函數執行帶有參數的命令時,開發人員可能會遇到以下問題:遇到不一致的情況,某些參數被接受,而其他參數則遇到錯誤。
一個這樣的例子如下code:
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.
解:
解決這個問題的關鍵是分離參數。在 shell 中,指令和參數通常用空格分隔。但是,當使用 exec.Command 時,每個參數必須作為單獨的字串傳遞:
exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")
透過以這種方式傳遞參數,程式可以正確解釋命令及其參數。這可以防止將參數組合成單一字串(例如“-o cpu”)時出現的錯誤。
以上是為什麼我的 Go `exec.Command` 由於某些參數而失敗,而同一命令在控制台中有效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!