Go exec 执行外部命令时的输出重定向
使用 go.exec
包执行外部命令时,无法直接使用输入输出重定向命 <
、>
,需要使用 Writer
、 Reader
来实现.
dumpFile, err := os.OpenFile("./data/"+batchNumber+"-"+tab+".sql", os.O_CREATE|os.O_RDWR, os.ModePerm)
if err != nil {
panic("无法打开文件:" + err.Error())
}
defer dumpFile.Close()
stderr := new(bytes.Buffer)
args := []string{
"--no-create-db",
"--no-create-info",
"--skip-opt",
"--quick",
"--where=id>" + strconv.Itoa(lastID) + " and id<=" + strconv.Itoa(currentID),
"-h" + Conf.DB.Host,
"-u" + Conf.DB.User,
"-p" + Conf.DB.Password,
Conf.DB.Name,
"tabname",
}
// fmt.Println("args:", args)
cmd := exec.Command("mysqldump", args...)
cmd.Stderr = stderr
cmd.Stdout = dumpFile
err = cmd.Start()
if err != nil {
logger.Infof("导出文件时发生错误:%s", err.Error())
return
}
cmd.Run()
cmd.Wait()