使用可变参数执行系统命令
执行涉及多个参数的系统命令时,有必要将命令与参数分开。下面的代码说明了这个概念:
import ( "fmt" "os/exec" "strings" "sync" ) func exeCmd(cmd string, wg *sync.WaitGroup) { fmt.Println("command is ", cmd) // Splitting head (e.g., "g++") from the rest of the command (e.g., "-c file.cpp") parts := strings.Fields(cmd) head := parts[0] parts = parts[1:len(parts)] out, err := exec.Command(head, parts...).Output() if err != nil { fmt.Printf("%s", err) } fmt.Printf("%s", out) wg.Done() // Signal to waitgroup that this goroutine is done } func main() { wg := new(sync.WaitGroup) wg.Add(3) x := []string{ "echo newline >> foo.o", "echo newline >> f1.o", "echo newline >> f2.o"} go exeCmd(x[0], wg) go exeCmd(x[1], wg) go exeCmd(x[2], wg) wg.Wait() }
在此代码中:
使用这种方法,程序可以使用任意数量的参数执行系统命令。它克服了原始代码对于多单词命令失败的限制。
以上是如何在 Go 中安全地执行带有可变参数的系统命令?的详细内容。更多信息请关注PHP中文网其他相关文章!