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读入数据哈。
网友评论