Heim >Backend-Entwicklung >Golang >Warum schlägt „exec.Command' meines Go-Programms im Terminal fehl, funktioniert aber in der Konsole?

Warum schlägt „exec.Command' meines Go-Programms im Terminal fehl, funktioniert aber in der Konsole?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-22 01:52:10225Durchsuche

Why Does My Go Program's `exec.Command` Fail in the Terminal But Succeed in the Console?

Befehl mit Argumenten aufrufen: Konsolenerfolg, Terminalfehler

In diesem Szenario führt ein Go-Programm den obersten Befehl erfolgreich mit zwei Argumenten aus ( -n 10 und -l 2) zeigt Details von 10 Prozessen an. Das Hinzufügen eines zusätzlichen Arguments (-o cpu) führt jedoch zu einem Fehler: „ungültiges Argument -o“.

Das Problem

Der Fehler tritt auf, wenn versucht wird, das auszuführen top-Befehl vom Terminal mit der vollständigen Argumentliste (-o cpu -n 10 -l 2). Derselbe Befehl funktioniert jedoch wie erwartet, wenn er über die Konsole ausgeführt wird.

Die Grundursache

Das Problem ergibt sich aus der Art und Weise, wie die Argumente vom Betriebssystem analysiert werden. Wenn Befehle über die Konsole ausgeführt werden, werden die einzelnen Argumente normalerweise durch ein Leerzeichen getrennt. Im Go-Programm werden die Argumente jedoch als einzelne Zeichenfolge übergeben. Dadurch muss das Betriebssystem die Argumente interpretieren, was in diesem Fall falsch geschieht.

Die Lösung

Um das Problem zu beheben, müssen die Argumente separat übergeben werden Zeichenfolgen an die exec.Command-Funktion. Der folgende Code demonstriert die korrekte Vorgehensweise:

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
}

Indem jedes Argument als separate Zeichenfolge übergeben wird, kann das Betriebssystem den Befehl korrekt interpretieren und wie vorgesehen ausführen. Dadurch wird der Fehler behoben und das Programm kann erfolgreich Details von 10 Prozessen mit dem zusätzlichen Argument (-o cpu) anzeigen.

Das obige ist der detaillierte Inhalt vonWarum schlägt „exec.Command' meines Go-Programms im Terminal fehl, funktioniert aber in der Konsole?. 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