Maison >développement back-end >Golang >Pourquoi « exec.Command » de mon programme Go échoue-t-il dans le terminal mais réussit-il dans la console ?

Pourquoi « exec.Command » de mon programme Go échoue-t-il dans le terminal mais réussit-il dans la console ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 01:52:10140parcourir

Why Does My Go Program's `exec.Command` Fail in the Terminal But Succeed in the Console?

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!

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