一尘不染

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

go

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

包主

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

因此,基本上,go在PATH中寻找整个“ ls -ltr”。而且显然不存在。我可以通过任何方式将标志传递给任何参数吗?TIA。


阅读 183

收藏
2020-07-02

共1个答案

一尘不染

您可以通过将更多参数传递给函数来将参数传递给程序-它是可变的:

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()
2020-07-02