Go 中外部命令写入 STDIN
在 Go 中,执行外部命令时,经常需要通过 STDIN 提供输入。本文探讨了一种在处理需要多个输入字段的命令时将输入写入 STDIN 的技术。
让我们考虑一个按顺序提示输入用户名和密码的命令,例如“登录”命令。要以编程方式提供这些输入,我们需要写入命令的 STDIN。
最初的方法是手动处理输入字段,如以下代码所示:
<code class="go">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) }</code>
但是,此方法不允许编程输入。解决方案在于利用 bytes.Buffer 来组装输入。这是改进的代码:
<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>
bytes.Buffer 充当字符缓冲区。通过写入由换行符分隔的用户名和密码,我们实质上构造了外部命令将依次读取的输入序列。命令的 Stdin 字段分配了缓冲区,确保输入被馈送到命令的进程中。
这种方法可以自动输入具有多个输入字段的外部命令,简化了 Go 与其他命令之间的交互 -线条工具。
以上是如何以编程方式为 Go 中的外部命令提供多个输入字段?的详细内容。更多信息请关注PHP中文网其他相关文章!