Как передать значение порта для запуска сервера с использованием пакетов exec и syscall golang - PullRequest
0 голосов
/ 11 декабря 2018

Мы пытаемся реализовать программу на go, которая запускает другую программу go по указанному пути, например

path, _ := exec.LookPath("program-name")

Далее мы дали набор команд go для запуска программы go, например

args := []string{"go", "install", "&&", "-port", "18000"}

Мы передали и путь, и аргументы вместе с os.Environ() в syscall.Exec ().Для запуска проекта, который мы вызываем, есть проверка, которая сообщает нам - порт требуется.Поскольку -port не является исполняемой командой, поэтому она не принимает значение порта.

Требуется, чтобы при вводе команды go install && project-name -port 19000 программа запускалась.

Запросесть ли способ достичь этого и как мы можем передать значение порта, чтобы получить желаемый результат.

1 Ответ

0 голосов
/ 11 декабря 2018

Это не работает по двум причинам

args := []string{"go", "install", "&&", "-port", "18000"}

Во-первых, отсутствует имя проекта.Я предполагаю, что это простая опечатка.

Во-вторых, syscall Exec не использует оболочку для запуска команд.Конструкция && и запуск нескольких команд из одной строки - это функции оболочки

Чтобы заставить syscall Exec сделать это, вы можете вызвать его, проверить возвращаемое значение и затем вызвать его снова со второй командой

Или вы можете использовать системный вызов Exec для запуска оболочки.Ниже приведен пример запуска оболочки - (с os / exec, но в данном случае это очень похоже) для запуска двух команд с &&

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    args := []string{"-c", "touch a && ls -l"}
    cmd := exec.Command("bash", args...)
    stuff, err := cmd.Output()
    fmt.Printf("Command finished with error: %v", err)
    fmt.Printf("%s", string(stuff))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...