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
Libérer: 2024-12-22 07:16:26
original
955 Les gens l'ont consulté

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
}
Copier après la connexion

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]
Copier après la connexion

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")
Copier après la connexion

é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")
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal