Maison >développement back-end >Golang >Comment saisir les informations d'identification de l'utilisateur dans un programme externe via Stdin in Go ?

Comment saisir les informations d'identification de l'utilisateur dans un programme externe via Stdin in Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 01:28:30932parcourir

How to Input User Credentials into an External Program via Stdin in Go?

Saisie des informations d'identification de l'utilisateur dans un programme externe via stdin

Considérez le scénario dans lequel vous souhaitez exécuter une commande externe et fournir les informations d'identification de l'utilisateur à partir d'un Allez programme. La commande demande la saisie du nom d'utilisateur et du mot de passe dans des champs séparés. Déterminer comment remplir séquentiellement ces champs à l'aide de stdin peut être un défi.

Solution : utiliser un bytes.Buffer

Pour résoudre ce problème, utilisez le type bytes.Buffer, ce qui permet la création d'un tampon pour l'écriture et la lecture des données d'octets. Suivez ces étapes :

  1. Créez un bytes.Buffer et écrivez le nom d'utilisateur et le mot de passe, séparés par des caractères de nouvelle ligne.
  2. Attribuez le tampon au champ Stdin de la commande.
  3. Exécutez la commande comme d'habitude, en redirigeant sa sortie standard et son stderr vers votre programme.

Exemple de code :

<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

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

Cette approche profite du fait que stdin lit les caractères jusqu'à rencontrer une nouvelle ligne. En alimentant le tampon vers stdin, la commande lira les informations d'identification séquentiellement sans rencontrer aucune ambiguïté.

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