分享
golang调用外部命令,并且通过stdin传数据
CodingCode · · 2326 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
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读入数据哈。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2326 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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读入数据哈。