Home >Backend Development >Golang >How to Programmatically Provide Multiple Input Fields to an External Command in Go?
Writing to STDIN of External Commands in Go
In Go, when executing external commands, it's often necessary to provide input via STDIN. This article explores a technique to write input to STDIN when dealing with commands that require multiple input fields.
Let's consider a command that prompts for a username and password sequentially, like the "login" command. To provide these inputs programmatically, we need to write to the STDIN of the command.
The initial approach was to manually handle the input fields as seen in the following code:
<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>
However, this method doesn't allow for programmatic input. The solution lies in utilizing a bytes.Buffer to assemble the input. Here's an improved code:
<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>
The bytes.Buffer acts as a character buffer. By writing the username and password separated by newline characters, we essentially construct a sequence of inputs that the external command will read in turn. The Stdin field of the command is assigned the buffer, ensuring that the inputs are fed into the command's process.
This approach enables automated input to external commands with multiple input fields, simplifying the interaction between Go and other command-line tools.
The above is the detailed content of How to Programmatically Provide Multiple Input Fields to an External Command in Go?. For more information, please follow other related articles on the PHP Chinese website!