zoukankan      html  css  js  c++  java
  • 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...
    ", os.Args[0])
            os.Exit(-1)
        }   
        fmt.Println(cmdFunc(cmd...))
    }
    
    func cmdFunc(cmd... string) string {
        fmt.Printf("cmd slice len: %d, value:%v
    ", 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 '
    '
        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...
    ", 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功能代码

    2. Go语言极速入门手册.go

  • 相关阅读:
    Python JPype 在 Win7 下安装与使用
    Visual Studio 2010 下 安装RGiesecke.DllExport
    python简单搭建HTTP Web服务器
    C 语言中 malloc、calloc、realloc 和free 函数的使用方法
    Anaconda 安装 ml_metrics package
    第28章 java反射机制
    第26章 java进制操作
    第27章 java I/O输入输出流
    第25章 网络编程
    第23章 java线程通信——生产者/消费者模型案例
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/11619637.html
Copyright © 2011-2022 走看看