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
Libérer: 2024-12-22 01:52:10
original
139 Les gens l'ont consulté

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

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!

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