Heim > Backend-Entwicklung > Golang > Warum kann mein Go-Code den Befehl „top' mit bestimmten Argumenten nicht ausführen, während derselbe Befehl über die Konsole ausgeführt wird?

Warum kann mein Go-Code den Befehl „top' mit bestimmten Argumenten nicht ausführen, während derselbe Befehl über die Konsole ausgeführt wird?

Susan Sarandon
Freigeben: 2024-12-22 07:16:26
Original
909 Leute haben es durchsucht

Why Does My Go Code Fail to Execute the `top` Command with Certain Arguments While the Same Command Works from the Console?

Befehlsaufruf mit einigen Argumenten funktioniert, bei anderen jedoch nicht, trotz Erfolg über die Konsole

Dieses Codefragment gibt Details von 10 Prozessen mit dem Befehl / aus usr/bin/top mit den Argumenten -n 10 und -l 2:

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
}
Nach dem Login kopieren

Jedoch das Hinzufügen des Arguments -o cpu (z. B. cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2")) führt 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]
Nach dem Login kopieren

Interessanterweise funktioniert der Befehl top -o cpu -n 10 -l 2 von der Konsole im Betriebssystem aus einwandfrei X 10.9.3.

Das Problem ergibt sich aus der Art und Weise, wie Argumente im Go-Code getrennt werden. Die folgende Zeile:

cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2")
Nach dem Login kopieren

entspricht der Verwendung des Befehls top „-o cpu“ „-n 10“ „-l 2“ in einer Shell. Die meisten Befehle analysieren Argumente ausschließlich in diesem Format. Deshalb spaltet top die Option -o cpu als erste Option ab und belässt den Rest als Argument. Dies funktioniert für numerische Argumente, schlägt jedoch fehl, wenn nach einem Feld mit dem Namen „cpu“ gesucht wird, was den Fehler verursacht.

Um dieses Problem zu lösen, trennen Sie die Argumente wie folgt:

cmd := exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum kann mein Go-Code den Befehl „top' mit bestimmten Argumenten nicht ausführen, während derselbe Befehl über die Konsole ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage