No Go, executar comandos externos e gerenciar suas entradas e saídas é uma tarefa comum. No entanto, ao lidar com comandos que solicitam entrada do usuário, como "login", pode ser um desafio automatizar essas entradas programaticamente.
Uma abordagem para esse problema é escrever diretamente na entrada padrão do comando (stdin ) usando um buffer de bytes. Vamos mergulhar na solução fornecida:
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
Neste código, criamos um bytes.Buffer chamado b e concatenamos o nome de usuário e a senha com novas linhas. Em seguida, atribuímos b ao campo Stdin do comando de login, conectando efetivamente o buffer ao fluxo de entrada do comando.
Quando o comando for executado, ele lerá os caracteres de b até encontrar uma nova linha, interpretando-a como o nome de usuário. Ele então lerá até a próxima nova linha, tratando-a como a senha. Ao escrever manualmente no buffer dessa maneira, evitamos a necessidade de interação do usuário e fornecemos as entradas necessárias programaticamente.
Lembre-se, stdin é um buffer de caracteres e os comandos normalmente leem a entrada até encontrarem novas linhas. Esta técnica permite armazenar em buffer e sequenciar entradas antes de alimentá-las para comandos externos, automatizando o processo de entrada sem exigir intervenção manual do usuário.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3