我有一个 go 程序需要执行另一个可执行程序,我想从 go 代码执行的程序位于/Users/myuser/bin/目录中,其完整路径为/Users/myuser/bin/prog代码是:package mainimport ( "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 权限被拒绝错误和Go build & exec: fork/exec: 权限被拒绝,但我不确定这里是否是这种情况。是我机器的权限问题吗?或者可以从代码中完成其他操作?
2 回答
aluckdog
TA贡献1847条经验 获得超7个赞
好的,我让它以这种方式工作:
我将命令执行实现更改为:
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())
}
开心每一天1111
TA贡献1836条经验 获得超13个赞
我遇到了同样的错误,但就我而言,我犯了一个错误。我没有提供可执行文件的路径,而是错误地提供了目录的路径。
另外,尝试检查二进制文件的权限(如果它是文件)。
ls -l <path_to_binary>
- 2 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消