2016-02-02 2 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 

ОС: 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

Смежные вопросы