golang调用外部命令,并且通过stdin传数据的例子

使用场景:

当我们需要调用一个外部命令,然后给外部命令传参数,常用方便的做法是通过命令行传参数,但是有些时候数据太长,或者基于安全考虑,比如传密码,等不方便使用参数时,我们可以通过stdin传递。

下面一个docker login传递密码的例子:

func dockerLogin(registry string, username string, token string) error {

cmdarray := []string{"-c", fmt.Sprintf("docker login %s -u %s --password-stdin", registry, username)}

cmd := exec.Command("bash", cmdarray...)

stdin, err := cmd.StdinPipe()

if err != nil {

return err

}

go func() {

defer stdin.Close()

io.WriteString(stdin, token+"\n")

}()

_, err = cmd.CombinedOutput()

if err != nil {

return err

}

return nil

}

当然这都需要外部命令本身支持从stdin读入数据哈。

有疑问加站长微信联系(非本文作者)