How to Programmatically Provide Multiple Input Fields to an External Command in Go?

Susan Sarandon
Release: 2024-10-28 13:43:02
Original
579 people have browsed it

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>
Copy after login

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>
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!