Heim >Backend-Entwicklung >Golang >Warum schlägt mein Go „exec.Command' mit bestimmten Argumenten fehl, während derselbe Befehl in der Konsole funktioniert?

Warum schlägt mein Go „exec.Command' mit bestimmten Argumenten fehl, während derselbe Befehl in der Konsole funktioniert?

DDD
DDDOriginal
2024-12-24 00:59:10834Durchsuche

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

Aufrufen von Befehlen mit Argumenten: Fehlerbehebung bei Fehlern

Beim Versuch, einen Befehl mit Argumenten mithilfe der exec.Command-Funktion in Go auszuführen, kann es sein, dass Entwickler stoßen auf Inkonsistenzen, bei denen bestimmte Argumente akzeptiert werden, während andere auf Fehler stoßen.

Ein solches Beispiel ist die Folgender 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
}

Dieser Code gibt die Details von 10 Prozessen erfolgreich aus. Das Hinzufügen eines zusätzlichen Arguments „-o cpu“ (z. B. cmd := exec.Command(app, „-o cpu“, „-n 10“, „-l 2“)) führt jedoch zu folgendem Fehler:

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]

Dieser Fehler tritt auf, obwohl der Befehl „top -o cpu -n 10 -l 2“ im funktioniert Konsole.

Lösung:

Der Schlüssel zur Lösung dieses Problems besteht darin, die Argumente zu trennen. In einer Shell werden Befehle und Argumente normalerweise durch Leerzeichen getrennt. Bei Verwendung von exec.Command muss jedoch jedes Argument als separate Zeichenfolge übergeben werden:

exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")

Durch die Übergabe von Argumenten auf diese Weise interpretiert das Programm den Befehl und seine Argumente korrekt. Dies verhindert den Fehler, der auftritt, wenn Argumente zu einer einzigen Zeichenfolge zusammengefasst werden (z. B. „-o cpu“).

Das obige ist der detaillierte Inhalt vonWarum schlägt mein Go „exec.Command' mit bestimmten Argumenten fehl, während derselbe Befehl in der Konsole funktioniert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn