Exécuter des commandes système avec des arguments variables
Dans certains scénarios, l'exécution de commandes système avec un nombre inconnu d'arguments peut poser un défi. Alors que les commandes à un seul mot telles que « ls » ou « date » fonctionnent de manière transparente, des commandes plus complexes peuvent provoquer des échecs du programme. Cet article explore une solution pour surmonter ce problème.
Le package os/exec de Go fournit la fonction Command(), qui prend une chaîne de commande en entrée. Cependant, si la commande contient plusieurs mots ou arguments, cela entraîne une erreur.
Pour exécuter de telles commandes, une approche alternative consiste à utiliser la commande sh. En appelant exec.Command("sh", "-c", cmd), le shell est utilisé pour exécuter la commande spécifiée, permettant des commandes complexes avec n'importe quel nombre d'arguments.
De plus, une approche encore plus simple est d'exploiter la fonctionnalité d'arguments variadiques de Go. En définissant une fonction qui accepte un nombre variable d'arguments et en les attribuant à une tranche de chaînes, la commande peut être exécutée comme suit :
func exeCmd(cmd string, wg *sync.WaitGroup) { fmt.Println("command is ", cmd) parts := strings.Fields(cmd) head := parts[0] parts = parts[1:len(parts)] out, err := exec.Command(head, parts...).Output() if err != nil { fmt.Printf("%s", err) } fmt.Printf("%s", out) wg.Done() // Signal completion to waitgroup }
En utilisant des arguments variadiques, vous pouvez transmettre un nombre variable d'arguments à la commande, facilitant l'exécution de commandes système complexes sans rencontrer les problèmes susmentionnés.
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!