func Run() error { log.Info("In Run Command") cmd := exec.Command("bash", "/opt/AlterKafkaTopic.sh") stdout, err := cmd.StdoutPipe() if err != nil { return err } if err = cmd.Start(); err != nil { return err } f, err := os.Create(filepath.Join("/opt/log/", "execution.log")) if err != nil { return err } if _, err := io.Copy(f, stdout); err != nil { return err } if err := cmd.Wait(); err != nil { return err } return f.Close()}我正在尝试从 go 代码执行 bash 脚本。该脚本更改了一些 kafka 主题属性。但是执行挂起io.Copy(f, stdout)并且在它之后不会继续。本程序运行在RHEL7.2服务器上。有人可以建议我哪里出错了
1 回答

FFIVE
TA贡献1797条经验 获得超6个赞
从文档:
Wait 将在看到命令退出后关闭管道。
换句话说,io.Copy 在 Wait() 被调用时退出,但 Wait 永远不会被调用,因为它被 Copy 阻塞了。在 goroutine 中运行 Copy,或者简单地分配f
给cmd.Stdout
:
f, err := os.Create(filepath.Join("/opt/log/", "execution.log"))
// TODO: Handle error
defer f.Close()
cmd := exec.Command("bash", "/opt/AlterKafkaTopic.sh")
cmd.Stdout = f
err = cmd.Run()
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消