gpt4 book ai didi

Go - 在外部命令上写入标准输入

转载 作者:IT王子 更新时间:2023-10-29 01:39:13 24 4
gpt4 key购买 nike

我有以下代码执行外部命令并向控制台输出两个等待用户输入的字段。一个用于用户名,另一个用于密码,然后我手动添加了它们。

谁能告诉我如何写入标准输入以便从程序内部输入这些输入?

对我来说棘手的部分是有两个不同的字段等待输入,我很难弄清楚如何一个接一个地填写。

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)。所以你可以提前把它们写在一个缓冲区里,然后把缓冲区直接提供给命令。

关于Go - 在外部命令上写入标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com