dou91808 2018-11-04 19:57 采纳率: 0%
浏览 102
已采纳

如何从os.execute从代码运行二进制文件

I'm trying to build binary with code and run the command against the bin (the bin is CLI) Via code,

mytest.go file

cmd := exec.Command("go", "build",  "-o", "./integration/testdata/fzr”,)
cmd.Dir = “./testdata"
err := cmd.Run()

now after the code run, I was able to see the bin under testdata folder And now I’m want to run a command like fzr —help

Like following

cmdOut := exec.Command(“fzr”, “—help”)
cmdOut.Dir = "./testdata/"
err := cmdOut.Run()

I got error

lookPathErr: {
    Name: “fzr”,
    Err: {
        s: "executable file not found in $PATH",
    },
}

Now If I take the fzr bin and put it in go/src/bin I was able to run fzr —help from the terminal

The project structure is like following

myGithubProject/
  |---- integration
   |---- -testdata
    |---- -fzr
   |---- -mytest.go

mytest is in the same level with the testadata and the fzr bin is under test data

What could be the problem ?

I try also to provide the full path to the bin with os.Getwd() which doesnt help ...

  • 写回答

2条回答 默认 最新

  • doucheng1063 2018-11-05 01:05
    关注

    Applications accessing the shell, do often not execute the shell initialization/configuration. For example the cron an clearly also go do not execute the shell initialization.

    To make your program work add the absolute path to the executable, or alternative the relative path from the location where your application is started from:

    exec.Command(“./integration/testdata/fzr”, “—help”)
    

    (Assuming that the path displayed is your actual path).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?