Go exec 执行外部命令时的输出重定向

使用 go.exec 包执行外部命令时,无法直接使用输入输出重定向命 <>,需要使用 WriterReader 来实现.


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()