我有以下代码,它执行外部命令并将两个字段输出到控制台等待用户输入。
一个用于用户名,另一个用于密码,然后我手动添加了它们。
谁能给我提示如何写入标准输入以便从程序内部输入这些输入?
对我来说,棘手的部分是有两个不同的字段等待输入,而我很难弄清楚如何一个接一个地填写。
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)
}
解决方案:
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
我想你可以使用bytes.Buffer
为了那个原因。
像这样的东西:
login := exec.Command(cmd, "login")
buffer := bytes.Buffer{}
buffer.Write([]byte("username\npassword\n"))
login.Stdin = &buffer
login.Stdout = os.Stdout
login.Stderr = os.Stderr
err := login.Run()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
诀窍是stdin
只是一个字符缓冲区,在读取凭据时,它只会读取字符,直到遇到\n
角色(或者也许\n\r
)。因此,您可以提前将它们写入缓冲区,并将缓冲区直接提供给命令。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)