É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!