2016-02-02 44 views
1

我需要使用Go工具链构建一个程序,然后执行它。由于某些原因,我得到了由于分叉而导致的权限错误。有没有办法规避这个错误或任何最佳实践?我认为我的程序与Go test工具类似,但go test不会收到此类错误。Go build&exec:fork/exec:权限被拒绝

package main 

import(
    "os" 
    "os/exec" 
    "flag" 
    log "github.com/golang/glog" 
) 

func main(){ 
    flag.Parse() 
    tdir := "abc" 
    if err := os.MkdirAll(tdir, 0777); err !=nil{ 
     log.Error(err) 
     return 
    } 
    f, err := os.Create(tdir + "/main.go") 
    if err !=nil{ 
     log.Error(err) 
     return 
    } 
    if err = f.Chmod(0777); err !=nil{ 
     log.Error(err) 
     return 
    } 
    defer f.Close() 
    defer os.Remove(f.Name()) 
    if _, err = f.Write([]byte(tpl)); err !=nil{ 
     log.Error(err) 
     return 
    } 
    cmd := exec.Command("go", "build", "-o", "edoc") 
    cmd.Path = tdir 
    b, err := cmd.CombinedOutput() 
    if err !=nil{ 
     log.Errorf("%s, err %v", b, err) 
     return 
    } 

} 

var tpl = `package main 

import(
    "fmt" 
    "flag" 
) 

func main(){ 
    flag.Parse() 
    fmt.Printf("Hello World") 

}` 

错误:

E0202 18:24:42.359008 13600 main.go:36] , err fork/exec abc: permission denied 

OS:OSX 10.11

回答

3

你从你的go二进制文件的位置改变命令路径,以abc

type Cmd struct { 
     // Path is the path of the command to run. 
     // 
     // This is the only field that must be set to a non-zero 
     // value. If Path is relative, it is evaluated relative 
     // to Dir. 
     Path string 

如果你想改变工作目录,使用Cmd.Dir