我希望我的方法接收以字符串形式执行的命令。如果输入字符串中包含空格,如何将其拆分为os.exec的cmd,args?
文档说创建我的Exec.Cmd结构像
cmd := exec.Command("tr", "a-z", "A-Z")
这工作正常:
a := string("ifconfig") cmd := exec.Command(a) output, err := cmd.CombinedOutput() fmt.Println(output) // prints ifconfig output
这将失败:
a := string("ifconfig -a") cmd := exec.Command(a) output, err := cmd.CombinedOutput() fmt.Println(output) // 'ifconfig -a' not found
我尝试了strings.Split(a),但收到一条错误消息:不能在exec.Command的参数中使用(type [] string)作为类型string
请检出:https : //golang.org/pkg/os/exec/#example_Cmd_CombinedOutput
您的代码失败,因为 exec.Command 要求将命令参数与实际 命令名分 隔开。
strings.Split 签名(https://golang.org/pkg/strings/#Split):
func Split(s, sep string) []string
您尝试实现的目标:
command := strings.Split("ifconfig -a", " ") if len(command) < 2 { // TODO: handle error } cmd := exec.Command(command[0], command[1:]...) stdoutStderr, err := cmd.CombinedOutput() if err != nil { // TODO: handle error more gracefully log.Fatal(err) } // do something with output fmt.Printf("%s\n", stdoutStderr)