Maison >développement back-end >Golang >Comment transmettre des arguments entre guillemets doubles aux commandes Windows à l'aide du package « exec » de Go ?

Comment transmettre des arguments entre guillemets doubles aux commandes Windows à l'aide du package « exec » de Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 22:16:03771parcourir

How to Pass Double-Quoted Arguments to Windows Commands Using Go's `exec` Package?

Exécution de commandes Windows avec des arguments entre guillemets doubles

Lors de l'exécution de commandes Windows à l'aide du package exec, certains caractères de la chaîne d'argument nécessitent un traitement spécial en raison de la façon dont Windows interprète guillemets doubles. Cet article explique pourquoi cela se produit et propose une solution pour résoudre ce problème.

Par défaut, Windows interprète les guillemets doubles dans une chaîne d'argument comme le début d'un nouvel argument. Cela devient problématique lorsque vous souhaitez transmettre un argument contenant des espaces, car Windows divisera l'argument en plusieurs parties. Par exemple, l'exécution de la commande suivante échouera :

exec.Command("find", `"SomeText"`).Output()

En effet, Windows interprétera l'argument entre guillemets comme deux arguments distincts : find et SomeText".

Solution :

Pour exécuter une commande Windows avec un argument entre guillemets, vous devez utiliser le champ CmdLine dans syscall.SysProcAttr, comme indiqué ci-dessous :

<code class="go">cmd := exec.Command(`find`)
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.CmdLine = `find "SomeText" test.txt`
out, err := cmd.Output()
fmt.Printf("%s\n", out)
fmt.Printf("%v\n", err)</code>

En définissant CmdLine, vous pouvez spécifier la ligne de commande exacte qui sera exécutée par Windows, en contournant l'analyse des arguments par défaut. Cela garantit que l'argument entre guillemets est bien. traité comme un seul argument.

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