如何使用exec和syscall软件包golang传递端口值以启动服务器

时间:2018-12-11 15:20:50

标签: go

我们正在尝试在go中实现一个程序,该程序从指定路径运行另一个go程序,例如

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

接下来,我们给出了一组go命令来运行go程序,例如

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

我们将path和args与os.Environ()一起传递给syscall.Exec()。为了运行我们正在调用的项目,有一个检查告诉我们-port是必需的。由于-port不是可执行命令,因此它不使用端口值。

要求是当我们键入go install && project-name -port 19000时,程序应运行。

查询可以通过任何方式实现,我们如何传递端口值以获得所需的结果。

1 个答案:

答案 0 :(得分:2)

由于两个原因,这不起作用

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

首先,“项目名称”丢失。我认为这是一个简单的错字。

第二,syscall Exec不使用外壳程序来启动命令。 &&构造并从一行开始运行多个命令是shell的功能

要使syscall Exec做到这一点,您可以调用它,检查返回值,然后使用第二个命令再次调用它

或者您可以使用syscall Exec启动外壳程序。下面有一个例子 启动一个shell-(使用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))
}