Maison > développement back-end > Golang > Pourquoi mon Go `exec.Command` échoue-t-il avec certains arguments, alors que la même commande fonctionne dans la console ?

Pourquoi mon Go `exec.Command` échoue-t-il avec certains arguments, alors que la même commande fonctionne dans la console ?

DDD
Libérer: 2024-12-24 00:59:10
original
823 Les gens l'ont consulté

Why Does My Go `exec.Command` Fail with Certain Arguments, While the Same Command Works in the Console?

Appel de commandes avec des arguments : dépannage des erreurs

Lors de la tentative d'exécution d'une commande avec des arguments à l'aide de la fonction exec.Command dans Go, les développeurs peuvent rencontrez des incohérences où certains arguments sont acceptés tandis que d'autres rencontrent des erreurs.

Un tel exemple est le suivant 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
}
Copier après la connexion

Ce code affiche avec succès les détails de 10 processus. Cependant, l'ajout d'un argument supplémentaire "-o cpu" (par exemple, cmd := exec.Command(app, "-o cpu", "-n 10", "-l 2")) entraîne l'erreur suivante :

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

Cette erreur se produit malgré le fait que la commande "top -o cpu -n 10 -l 2" fonctionne dans le console.

Solution :

La clé pour résoudre ce problème est de séparer les arguments. Dans un shell, les commandes et les arguments sont généralement séparés par des espaces. Cependant, lors de l'utilisation de exec.Command, chaque argument doit être passé sous forme de chaîne distincte :

exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")
Copier après la connexion

En passant les arguments de cette façon, le programme interprète correctement la commande et ses arguments. Cela évite l'erreur qui survient lorsque les arguments sont combinés en une seule chaîne (par exemple, "-o cpu").

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal