Как запустить бинарный файл из os.execute из кода - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь собрать двоичный файл с кодом и выполнить команду для бина (бина это CLI) По коду

mytest.go файл

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

теперь после запуска кода я смог увидеть bin в папке testdata И теперь я хочу выполнить команду типа fzr —help

Как следует

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

Я получил ошибку

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

Теперь, если я возьму бин fzr и положу его в go / src / bin, я смог запустить fzr —help из терминала

Структура проекта выглядит следующим образом

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

mytest находится на одном уровне с testadata, а корзина fzr проверяется

В чем может быть проблема?

Я также пытаюсь указать полный путь к корзине с помощью os.Getwd(), что не помогает ...

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

На самом деле, если мы хотим запустить двоичный файл / cmd, либо его путь должен быть указан в $PATH var, либо мы должны указать его путь (абсолютный или относительный). В этом случае путь для команды fzr не указан в переменной $PATH, потому что в этом случае он будет работать без проблем.

Так что либо мы должны использовать относительный путь

// since you set the working dir as `./testdata`
cmd := exec.Command(“./fzr”, “—help”)

cmd.Dir = «./integration/testdata"

или абсолютный путь

absolutePath, _ := os.Getwd()
cmd := exec.Command(absolutePath+“/integration/testdata/fzr”, “—help”)
0 голосов
/ 05 ноября 2018

Приложения, обращающиеся к оболочке, часто не выполняют инициализацию / настройку оболочки. Например, cron a также не выполняет инициализацию оболочки.

Чтобы ваша программа работала, добавьте абсолютный путь к исполняемому файлу или альтернативный относительный путь от места, откуда запускается ваше приложение:

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

(при условии, что отображаемый путь является вашим фактическим путем).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...