管道字符串到 Golang 中命令的 STDIN

Sum*_*osh 3 subprocess pipe exec go piping

我想subprocess.run在 Golang 中复制以下函数调用。什么是正确的方法呢?

subprocess.run(['kinit', username], input=password.encode())
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经弄清楚如何使用exec.Command来运行外部命令,但让我感到困惑的是将字符串作为STDIN该命令的输入传递。Pythonsubprocess.run有一个方便的input参数来处理这个问题,我如何在 Golang 中获得类似的结果?

Sum*_*osh 6

我想出了怎么做。

package main

import "os/exec"
import "strings"

func main() {
    cmd := exec.Command("kinit", username)
    cmd.Stdin = strings.NewReader(password)
    err := cmd.Run()
}
Run Code Online (Sandbox Code Playgroud)

对象的Stdin属性CommandSTDIN管道,我们可以将其设置为strings.NewReader包含输入字符串的对象,以达到与问题中提到的Python snippet 相同的效果。