Maison >développement back-end >Golang >Pourquoi mon code Go ne parvient-il pas à exécuter la commande « top » avec certains arguments alors que la même commande fonctionne à partir de la console ?

Pourquoi mon code Go ne parvient-il pas à exécuter la commande « top » avec certains arguments alors que la même commande fonctionne à partir de la console ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 07:16:26975parcourir

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

L'appel d'une commande avec certains arguments fonctionne mais pas avec d'autres malgré le succès depuis la console

Cet extrait de code affiche les détails de 10 processus à l'aide de la commande / usr/bin/top avec les arguments -n 10 et -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
}

Cependant, l'ajout de l'argument -o cpu (par exemple, cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2")) entraîne l'erreur :

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]

Fait intéressant, la commande top -o cpu -n 10 -l 2 fonctionne correctement depuis la console sous OS X 10.9.3.

Le problème se pose de la façon dont les arguments sont séparés dans le code Go. La ligne suivante :

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

équivaut à utiliser la commande top "-o cpu" "-n 10" "-l 2" dans un shell. La plupart des commandes analysent strictement les arguments dans ce format. Par conséquent, top sépare le -o cpu comme première option, laissant le reste comme argument. Cela fonctionne pour les arguments numériques mais échoue lors de la recherche d'un champ nommé " cpu", provoquant l'erreur.

Pour résoudre ce problème, séparez les arguments comme suit :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn