Appel d'une commande avec des arguments : réussite de la console, échec du terminal
Dans ce scénario, un programme Go exécute avec succès la commande supérieure avec deux arguments ( -n 10 et -l 2), affichant les détails de 10 processus. Cependant, l'ajout d'un argument supplémentaire (-o cpu) provoque une erreur : "argument invalide -o".
Le problème
L'erreur se produit lors de la tentative d'exécution du commande top depuis le terminal avec la liste complète des arguments (-o cpu -n 10 -l 2). Cependant, la même commande fonctionne comme prévu lorsqu'elle est exécutée à partir de la console.
La cause profonde
Le problème vient de la façon dont les arguments sont analysés par le système d'exploitation. Normalement, lorsque les commandes sont exécutées depuis la console, chaque argument est séparé par un espace. Cependant, dans le programme Go, les arguments sont transmis sous la forme d'une seule chaîne. Cela laisse le système d'exploitation interpréter les arguments, ce qu'il fait de manière incorrecte dans ce cas.
La solution
Pour résoudre le problème, les arguments doivent être transmis séparément. chaînes à la fonction exec.Command. Le code suivant montre la bonne façon de procéder :
import ( "os/exec" ) func main() { app := "/usr/bin/top" cmd := exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2") out, err := cmd.CombinedOutput() // Error handling omitted for brevity value := string(out) return value }
En passant chaque argument sous forme de chaîne distincte, le système d'exploitation peut interpréter correctement la commande et l'exécuter comme prévu. Cela résout l'erreur et permet au programme d'afficher avec succès les détails de 10 processus avec l'argument supplémentaire (-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!