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