【问题标题】:Command failed with fork/exec permission denied on MacOS?命令失败并在 MacOS 上拒绝 fork/exec 权限?
【发布时间】:2019-11-21 21:28:37
【问题描述】:

我有一个 go 程序需要执行另一个可执行程序,我想从我的 go 代码执行的程序位于 /Users/myuser/bin/ 目录和它的完整路径将是 /Users/myuser/bin/prog

代码是:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
cmd := exec.Command("prog")
cmd.Dir = "/Users/myuser/bin/"
out, err := cmd.CombinedOutput()
    if err != nil {
        log.Fatalf("cmd.Run() failed with %s\n", err)
    }
    fmt.Printf("combined out:\n%s\n", string(out))
}

当我在 MacOS Mojave 上运行上述代码时,我总是收到以下错误:

fork/exec /Users/myuser/bin/ 命令失败:权限被拒绝

我已经看到类似错误的其他答案,例如 Go fork/exec permission denied errorGo build & exec: fork/exec: permission denied,但我不确定这里是否是这种情况。

这是我机器上的权限问题吗?还是可以从代码中完成其他操作?

【问题讨论】:

  • 给定代码不太可能出现错误消息。尝试运行go clean 并重新编译您的代码并再次尝试查看错误是否改变。
  • @leafbebop 谢谢,我确实干净了,现在它告诉我:命令失败,退出状态为 1

标签: macos go


【解决方案1】:

好的,我让它这样工作:

  • 我在提到leaf bebop 时运行了go clean

  • 我将命令执行实现改为:

    func main() {
    cmd := exec.Command("prog")
        cmd.Dir = "/Users/myuser/bin/"
        var out bytes.Buffer
        var stderr bytes.Buffer
        cmd.Stdout = &out
        cmd.Stderr = &stderr
        err := cmd.Run()
        if err != nil {
            fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
            return
        }
        fmt.Println("Result: " + out.String())
    }

【讨论】:

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