如何将一组动态参数传递给Go';s命令执行命令?

如何将一组动态参数传递给Go';s命令执行命令?,go,command,exec,Go,Command,Exec,我在这里遇到了一个问题,与传递给Go的exec.Command函数的参数有关,我想知道是否有一种方法可以动态传递这些参数?下面是sed问题中的一些示例代码: package main import "os/exec" func main() { app := "echo" //app := "buah" arg0 := "-e" arg1 := "Hello world" arg2 := "\n\tfrom" arg3 := "golang"

我在这里遇到了一个问题,与传递给Go的
exec.Command
函数的参数有关,我想知道是否有一种方法可以动态传递这些参数?下面是sed问题中的一些示例代码:

package main

import "os/exec"

func main() {
    app := "echo"
    //app := "buah"

    arg0 := "-e"
    arg1 := "Hello world"
    arg2 := "\n\tfrom"
    arg3 := "golang"

    cmd := exec.Command(app, arg0, arg1, arg2, arg3)
    out, err := cmd.Output()

    if err != nil {
        println(err.Error())
        return
    }

    print(string(out))
}
因此,正如您所见,每个arg在上面被定义为
arg0
arg1
arg2
arg3
。它们与要运行的实际命令(在本例中为
app
var)一起传递到
Command
函数中

如果我有一系列的论点,这些论点可能总是有一个我想通过的不确定的计数,那会怎么样。这可能吗?

像这样:

args := []string{"what", "ever", "you", "like"}
cmd := exec.Command(app, args...)
看看golang.org上的语言和教程。

您可以尝试使用,这对我很有用。这是一个不同的示例,但它使用了接受动态参数的概念

package main

import (
    "flag"
    "log"
    "os/exec"
    "strings"
)
func main() {
        flag.Parse()    
        arg1, arg2 := strings.Join(flag.Args()[:1], " "), strings.Join(flag.Args()[1:], " ")
        cmd := exec.Command(arg1, arg2)
        err := cmd.Start()
        if err != nil {
            log.Fatal(err)
        }
        log.Printf("Waiting for command to finish...")
        log.Printf("Process id is %v", cmd.Process.Pid)
        err = cmd.Wait()
        log.Printf("Command finished with error, now restarting: %v", err)
}
像这样跑

$ go run main.go node ../web-test/index.js
2019/01/26 13:32:29 Waiting for command to finish...
2019/01/26 13:32:29 Process id is 3582

对于那些将来通过谷歌搜索引擎阅读本文的人,我留下了新的解决方案

在GO1.16中,像上面答案一样传递切片现在会导致编译错误

app:=“echo”
args:=[]字符串{“什么”、“曾经”、“你”、“喜欢”}

cmd:=exec.Command(app,args…//至少在golang 1.11中,这不再有效。args必须是字符串,而不是字符串片段。@GabrielA.Zorrilla我怀疑您的评论是否正确。Go 1.11仍在兼容性保证范围内,文档称其有效。golang 1.12.1中也使用了Go 1.11,并且有效。双重确认。@GabrielA.Zorrilla通知“splat”操作员(…)