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!