golang执行Linux和Windows命令
Posted embedded-linux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang执行Linux和Windows命令相关的知识,希望对你有一定的参考价值。
1. 可接收变参命令
package main import ( "fmt" "os" "os/exec" "strings" ) func main() sliceFunc(os.Args[1:]...) func sliceFunc(cmd... string) fmt.Println(cmd) if len(cmd) == 0 fmt.Printf("Usage: %s args...\\n", os.Args[0]) os.Exit(-1) fmt.Println(cmdFunc(cmd...)) func cmdFunc(cmd... string) string fmt.Printf("cmd slice len: %d, value:%v\\n", len(cmd), cmd) result, err := exec.Command(cmd[0], cmd[1:]...).Output() if err != nil fmt.Println("Command failed:", err.Error()) // return string(result) // with ‘\\n‘ return strings.TrimSpace(string(result))
执行结果:
$ go run slice.go uname -a [uname -a] cmd slice len: 2, value:[uname -a] Linux e531 5.0.0-29-generic #31~18.04.1-Ubuntu SMP Thu Sep 12 18:29:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux $ go run slice.go uname [uname] cmd slice len: 1, value:[uname] Linux
2. Linux和Windows命令
只接收单个命令并执行:
package main import ( "fmt" "errors" "os" "os/exec" "runtime" "strings" ) func main() if len(os.Args) == 1 fmt.Printf("Usage: %s args...\\n", os.Args[0]) os.Exit(-1) str1, err := RunCommandWithErr(os.Args[1]) if err != nil fmt.Println(err.Error()) else fmt.Println(str1) str := RunCommand(os.Args[1]) fmt.Println(str) func runInLinux(cmd string) string fmt.Println("Running Linux cmd:" , cmd) result, err := exec.Command("/bin/sh", "-c", cmd).Output() if err != nil fmt.Println(err.Error()) return strings.TrimSpace(string(result)) func runInWindows(cmd string) string fmt.Println("Running Win cmd:", cmd) result, err := exec.Command("cmd", "/c", cmd).Output() if err != nil fmt.Println(err.Error()) return strings.TrimSpace(string(result)) func RunCommand(cmd string) string if runtime.GOOS == "windows" return runInWindows(cmd) else return runInLinux(cmd) func RunLinuxCommand(cmd string) string if runtime.GOOS == "windows" return "" else return runInLinux(cmd) func runInLinuxWithErr(cmd string) (string, error) fmt.Println("Running Linux cmd:"+cmd) result, err := exec.Command("/bin/sh", "-c", cmd).Output() if err != nil fmt.Println(err.Error()) return strings.TrimSpace(string(result)), err func runInWindowsWithErr(cmd string) (string, error) fmt.Println("Running Windows cmd:"+cmd) result, err := exec.Command("cmd", "/c", cmd).Output() if err != nil fmt.Println(err.Error()) return strings.TrimSpace(string(result)), err func RunCommandWithErr(cmd string) (string, error) if runtime.GOOS == "windows" return runInWindowsWithErr(cmd) else return runInLinuxWithErr(cmd) func RunLinuxCommandWithErr(cmd string)(string, error) if runtime.GOOS == "windows" return "", errors.New("could not run in Windows Os") else return runInLinuxWithErr(cmd)
执行结果:
$ go run cmd.go uname Running Linux cmd:uname Linux Running Linux cmd: uname Linux $ go run cmd.go uname -a Running Linux cmd:uname Linux Running Linux cmd: uname Linux
参考:
1. golang功能代码
以上是关于golang执行Linux和Windows命令的主要内容,如果未能解决你的问题,请参考以下文章