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 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消