首頁 >後端開發 >Golang >為什麼我的 Go `exec.Command` 由於某些參數而失敗,而同一命令在控制台中有效?

為什麼我的 Go `exec.Command` 由於某些參數而失敗,而同一命令在控制台中有效?

DDD
DDD原創
2024-12-24 00:59:10834瀏覽

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

使用參數呼叫指令:排除錯誤

當嘗試使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn