Maison  >  Article  >  développement back-end  >  Comment fournir par programme plusieurs champs de saisie à une commande externe dans Go ?

Comment fournir par programme plusieurs champs de saisie à une commande externe dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 13:43:02579parcourir

How to Programmatically Provide Multiple Input Fields to an External Command in Go?

Écriture dans STDIN de commandes externes dans Go

Dans Go, lors de l'exécution de commandes externes, il est souvent nécessaire de fournir une entrée via STDIN. Cet article explore une technique pour écrire une entrée dans STDIN lors de commandes nécessitant plusieurs champs de saisie.

Considérons une commande qui demande un nom d'utilisateur et un mot de passe de manière séquentielle, comme la commande "login". Pour fournir ces entrées par programme, nous devons écrire dans le STDIN de la commande.

L'approche initiale consistait à gérer manuellement les champs de saisie comme le montre le code suivant :

<code class="go">login := exec.Command(cmd, "login")

login.Stdout = os.Stdout
login.Stdin = os.Stdin
login.Stderr = os.Stderr

err := login.Run()
if err != nil {
    fmt.Fprintln(os.Stderr, err)
}</code>

Cependant , cette méthode ne permet pas la saisie par programme. La solution réside dans l’utilisation d’un bytes.Buffer pour assembler l’entrée. Voici un code amélioré :

<code class="go">login := exec.Command(cmd, "login")

var b bytes.Buffer
b.Write([]byte(username + "\n" + pwd + "\n"))

login.Stdout = os.Stdout
login.Stdin = &b
login.Stderr = os.Stderr</code>

Le bytes.Buffer agit comme un tampon de caractères. En écrivant le nom d'utilisateur et le mot de passe séparés par des caractères de nouvelle ligne, nous construisons essentiellement une séquence d'entrées que la commande externe lira à son tour. Le champ Stdin de la commande se voit attribuer le tampon, garantissant que les entrées sont introduites dans le processus de la commande.

Cette approche permet une saisie automatisée des commandes externes avec plusieurs champs de saisie, simplifiant l'interaction entre Go et d'autres commandes. outils de ligne.

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