我一直在尝试运行命令并在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。
答案 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()