在 Go 中,执行外部命令并管理其输入和输出是一项常见任务。但是,在处理提示用户输入的命令(例如“登录”)时,以编程方式自动执行这些输入可能具有挑战性。
解决此问题的一种方法是直接写入命令的标准输入(stdin) )使用字节缓冲区。让我们深入研究提供的解决方案:
<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>
在此代码中,我们创建一个名为 b 的 bytes.Buffer 并将用户名和密码与换行符连接起来。然后,我们将 b 分配给登录命令的 Stdin 字段,有效地将缓冲区连接到命令的输入流。
当命令执行时,它将从 b 读取字符,直到遇到换行符,将其解释为用户名。然后它将读取直到下一个换行符,并将其视为密码。通过以这种方式手动写入缓冲区,我们绕过了用户交互的需要,并以编程方式提供必要的输入。
请记住,stdin 是一个字符缓冲区,命令通常会读取输入,直到遇到换行符。该技术允许您在将输入提供给外部命令之前对其进行缓冲和排序,从而自动执行输入过程,而无需用户手动干预。
以上是如何在 Go 中自动执行外部命令输入:绕过“登录”等命令的用户交互的指南的详细内容。更多信息请关注PHP中文网其他相关文章!