1. 可接收变参命令

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "os/exec"
  6. "strings"
  7. )
  8.  
  9. func main(){
  10. sliceFunc(os.Args[:]...)
  11. }
  12.  
  13. func sliceFunc(cmd... string){
  14. fmt.Println(cmd)
  15. if len(cmd) == {
  16. fmt.Printf("Usage: %s args...\n", os.Args[])
  17. os.Exit(-)
  18. }
  19. fmt.Println(cmdFunc(cmd...))
  20. }
  21.  
  22. func cmdFunc(cmd... string) string {
  23. fmt.Printf("cmd slice len: %d, value:%v\n", len(cmd), cmd)
  24. result, err := exec.Command(cmd[], cmd[:]...).Output()
  25. if err != nil {
  26. fmt.Println("Command failed:", err.Error())
  27. }
  28.  
  29. // return string(result) // with '\n'
  30. return strings.TrimSpace(string(result))
  31. }

执行结果:

  1. $ go run slice.go uname -a
  2. [uname -a]
  3. cmd slice len: , value:[uname -a]
  4. Linux e531 5.0.--generic #~18.04.-Ubuntu SMP Thu Sep :: UTC x86_64 x86_64 x86_64 GNU/Linux
  5. $ go run slice.go uname
  6. [uname]
  7. cmd slice len: , value:[uname]
  8. Linux

2. Linux和Windows命令

只接收单个命令并执行:

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "errors"
  6. "os"
  7. "os/exec"
  8. "runtime"
  9. "strings"
  10. )
  11.  
  12. func main(){
  13. if len(os.Args) == {
  14. fmt.Printf("Usage: %s args...\n", os.Args[])
  15. os.Exit(-)
  16. }
  17. str1, err := RunCommandWithErr(os.Args[])
  18. if err != nil {
  19. fmt.Println(err.Error())
  20. } else {
  21. fmt.Println(str1)
  22. }
  23.  
  24. str := RunCommand(os.Args[])
  25. fmt.Println(str)
  26. }
  27.  
  28. func runInLinux(cmd string) string{
  29. fmt.Println("Running Linux cmd:" , cmd)
  30. result, err := exec.Command("/bin/sh", "-c", cmd).Output()
  31. if err != nil {
  32. fmt.Println(err.Error())
  33. }
  34. return strings.TrimSpace(string(result))
  35. }
  36.  
  37. func runInWindows(cmd string) string{
  38. fmt.Println("Running Win cmd:", cmd)
  39. result, err := exec.Command("cmd", "/c", cmd).Output()
  40. if err != nil {
  41. fmt.Println(err.Error())
  42. }
  43. return strings.TrimSpace(string(result))
  44. }
  45.  
  46. func RunCommand(cmd string) string{
  47. if runtime.GOOS == "windows" {
  48. return runInWindows(cmd)
  49. } else {
  50. return runInLinux(cmd)
  51. }
  52. }
  53.  
  54. func RunLinuxCommand(cmd string) string{
  55. if runtime.GOOS == "windows" {
  56. return ""
  57. } else {
  58. return runInLinux(cmd)
  59. }
  60. }
  61.  
  62. func runInLinuxWithErr(cmd string) (string, error) {
  63. fmt.Println("Running Linux cmd:"+cmd)
  64. result, err := exec.Command("/bin/sh", "-c", cmd).Output()
  65. if err != nil {
  66. fmt.Println(err.Error())
  67. }
  68. return strings.TrimSpace(string(result)), err
  69. }
  70.  
  71. func runInWindowsWithErr(cmd string) (string, error){
  72. fmt.Println("Running Windows cmd:"+cmd)
  73. result, err := exec.Command("cmd", "/c", cmd).Output()
  74. if err != nil {
  75. fmt.Println(err.Error())
  76. }
  77. return strings.TrimSpace(string(result)), err
  78. }
  79.  
  80. func RunCommandWithErr(cmd string) (string, error){
  81. if runtime.GOOS == "windows" {
  82. return runInWindowsWithErr(cmd)
  83. } else {
  84. return runInLinuxWithErr(cmd)
  85. }
  86. }
  87.  
  88. func RunLinuxCommandWithErr(cmd string)(string, error){
  89. if runtime.GOOS == "windows" {
  90. return "", errors.New("could not run in Windows Os")
  91. } else {
  92. return runInLinuxWithErr(cmd)
  93. }
  94. }

执行结果:

  1. $ go run cmd.go uname
  2. Running Linux cmd:uname
  3. Linux
  4. Running Linux cmd: uname
  5. Linux
  6. $ go run cmd.go uname -a
  7. Running Linux cmd:uname
  8. Linux
  9. Running Linux cmd: uname
  10. Linux

参考:

1. golang功能代码

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

golang执行Linux和Windows命令的更多相关文章

  1. Mac OSX系统、Linux、Windows命令行教程

    目录 Mac OSX系统.Linux.Windows命令行教程 一.各系统终端的使用方法 二.各系统命令的功能 Mac OSX系统.Linux.Windows命令行教程 用你的终端做一些事情 (com ...

  2. mysql命令行的导入导出sql,txt,excel(都在linux或windows命令行操作)(转自筑梦悠然)

    原文链接https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/73805962 Mysql导入导出sql,txt,excel 首先我们通过命令行 ...

  3. 解决python执行linux查看文件命令后,因为^@特殊符号导致部分内容不显示的问题

    问题现象 文件a的内容如下: 查看第3行到第5行的内容:sed -n '3,5p' /tmp/test/a 可见在命令行执行,是没有问题的. 在python中使用paramiko模块执行linux命令 ...

  4. golang执行linux命令

    golang exec 执行系统命令 golang    2014-09-25 13:17:44    2779    0    0 exec.Command() 最简单的方法: cmd := exe ...

  5. Windows 通过批处理自动执行 linux服务器上面命令的办法

    1. 使用putty 下载地址 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 直接使用 exe版本就可以 https:/ ...

  6. linux、WINDOWS命令行下查找和统计行数

    linux : 例子: netstat -an | grep TIME_WAIT | wc -l |  管道符 grep 查找命令 wc 统计命令 windows: 例子: netstat -an | ...

  7. 大技霸教你远程执行Linux脚本和命令

    如果现在需要在 Linux 服务器上执行一系列命令(比如搭建 LNMP 环境)我应该会第一时间想到想办法写个 Shell 脚本,然后扔上去执行以下看看结果. 然而一贯懒惰的我并不想这么去执行 Shel ...

  8. python执行linux的shell命令

    python执行shell脚本常用的方法 import os val=os.system("shell语句")  >>> val=os.system(" ...

  9. linux 远程 windows 命令:rdesktop vs windows mstsc

    [root@bass tmp]# which rdesktop /usr/bin/rdesktop [root@bass tmp]# rpm -qf /usr/bin/rdesktop rdeskto ...

随机推荐

  1. 带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc

    如果头文件中有多个类,带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc

  2. qtableview 右键菜单弹出及获取数据

    connect(tableView, SIGNAL(customContextMenuRequested(const QPoint &)), this,SLOT(slot_tableViewM ...

  3. DL/T645-2007 及 Modbus-RTU智能电表调试工具

    最近在做微信门禁,智能电表采集,智能水表采集项目时,发现网上很多调试工具用起来不顺手,电脑里面起码下了五六个软件. 好不容易弄清楚了,就自己写一个工具,方便自己使用,也顺便造福一下其他人吧

  4. Ubuntu16.0.4安装OpenCV3.4.2

    (1)到官网下载opencv3.4.2,链接:https://opencv.org/releases.html (2)下载opencv_contrib,链接:https://github.com/op ...

  5. Oracle Spatial分区应用研究之七:同等分区粒度下全局索引优于分区索引的原因分析

    1.实验结论 同等分区粒度下,使用分区空间索引进行空间查询,比使用全局空间索引进行查询,对数据字典表的访问次数更多.假设分区数为X,则大概多3X次访问.具体说明见6实验结论. 2.实验目的 在之前的测 ...

  6. 031 SSM综合练习07--数据后台管理系统--用户详情查询

    1.用户详情查询流程分析 2.代码实现 (1)user-list.jsp页面部分代码 点击jsp页面中的详情按钮,发送请求到UserController.java <!--数据列表--> ...

  7. [转帖](区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗?

    (区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗? http://baijiahao.baidu.com/s?id=1600948969290990883&wfr=spide ...

  8. 使用SSM搭建一个简单的crud项目

    使用SSM完成增删查改 前端使用到的技术:ajax,json,bootstrap等 完整项目地址:点这里GitHub 项目地址,可以在线访问 这一章节主要搭建SSM的环境. SpringMVC Spr ...

  9. Python的正则表达式和爬虫

    1.常用元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 2.常用限 ...

  10. Python3 - Bytes类型

    Python3 新增 bytes 类型,是指一堆字节的集合,十六进制表现形式,两个十六进制数构成一个 byte ,以 b 开头的字符串都是 bytes 类型. 计算机只能存储二进制,字符.图片.视频. ...