在 Go 中,执行外部命令并管理其输入和输出是一项常见任务。但是,在处理提示用户输入的命令(例如“登录”)时,以编程方式自动执行这些输入可能具有挑战性。
解决此问题的一种方法是直接写入命令的标准输入(stdin) )使用字节缓冲区。让我们深入研究提供的解决方案:
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
在此代码中,我们创建一个名为 b 的 bytes.Buffer,并将用户名和密码与换行符连接起来。然后,我们将 b 分配给登录命令的 Stdin 字段,有效地将缓冲区连接到命令的输入流。
当命令执行时,它将从 b 读取字符,直到遇到换行符,将其解释为用户名。然后它将读取直到下一个换行符,并将其视为密码。通过以这种方式手动写入缓冲区,我们绕过了用户交互的需要,并以编程方式提供必要的输入。
请记住,stdin 是一个字符缓冲区,命令通常读取输入,直到遇到换行符。该技术允许您在将输入提供给外部命令之前对其进行缓冲和排序,从而自动执行输入过程,而无需用户手动干预。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3