【问题标题】:Go build & exec: fork/exec: permission deniedGo build & exec: fork/exec: 权限被拒绝
【发布时间】:2016-02-02 16:46:28
【问题描述】:

我需要使用 Go 工具链构建一个程序,然后执行它。出于某些原因,由于分叉,我收到了权限错误。有没有办法规避这个错误或任何最佳实践?我认为我的程序使用Go test 工具做了类似的事情,尽管go test 没有出现这种错误。

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

【问题讨论】:

    标签: macos go exec fork


    【解决方案1】:

    您正在将命令路径从 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      • 2017-08-02
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      相关资源
      最近更新 更多