如何在go lang中将标志传递给命令?

时间:2015-09-06 13:45:58

标签: go

我一直在尝试运行命令并在golang中解析输出。以下是我想要做的一个示例:

package main

import (
        "fmt"
    "os/exec"
)

func main() {
    out,err := exec.Command("ls -ltr").Output()
        if err != nil {
                fmt.Println("Error: %s", err)
        }
    fmt.Printf("%s",out)
}

现在,当我尝试运行“ls -ltr”时,我收到此错误:

Error: %s exec: "ls -ltr": executable file not found in $PATH

所以,基本上就是在PATH中寻找整个“ls -ltr”。它显然不存在。有什么方法可以把旗帜传递给任何一个参数吗?TIA。

1 个答案:

答案 0 :(得分:7)

通过向函数传递更多参数,将参数传递给程序 - 它是可变参数:

out,err := exec.Command("ls","-ltr").Output()

https://golang.org/pkg/os/exec/#Command

这是一个非常常见的exec样式函数约定,您将在大多数语言中看到它。另一种常见的模式是建设者。

有时你需要通过的参数布局在编译时不会被知道(尽管将任意命令发送到系统并不是一个好主意 - 保持安全!)。如果要传递未知数量的参数,可以使用具有一些特殊语法的数组:

// Populate myArguments however you like
myArguments := []string{"bar","baz"}

// Pass myArguments with "..." to use variadic behaviour
out,err := exec.Command("foo", myArguments...).Output()