golang执行Linux和Windows命令
1. 可接收变参命令
- package main
- import (
- "fmt"
- "os"
- "os/exec"
- "strings"
- )
- func main(){
- sliceFunc(os.Args[:]...)
- }
- func sliceFunc(cmd... string){
- fmt.Println(cmd)
- if len(cmd) == {
- fmt.Printf("Usage: %s args...\n", os.Args[])
- os.Exit(-)
- }
- 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[], cmd[:]...).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: , value:[uname -a]
- Linux e531 5.0.--generic #~18.04.-Ubuntu SMP Thu Sep :: UTC x86_64 x86_64 x86_64 GNU/Linux
- $ go run slice.go uname
- [uname]
- cmd slice len: , value:[uname]
- Linux
2. Linux和Windows命令
只接收单个命令并执行:
- package main
- import (
- "fmt"
- "errors"
- "os"
- "os/exec"
- "runtime"
- "strings"
- )
- func main(){
- if len(os.Args) == {
- fmt.Printf("Usage: %s args...\n", os.Args[])
- os.Exit(-)
- }
- str1, err := RunCommandWithErr(os.Args[])
- if err != nil {
- fmt.Println(err.Error())
- } else {
- fmt.Println(str1)
- }
- str := RunCommand(os.Args[])
- 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命令的更多相关文章
- Mac OSX系统、Linux、Windows命令行教程
目录 Mac OSX系统.Linux.Windows命令行教程 一.各系统终端的使用方法 二.各系统命令的功能 Mac OSX系统.Linux.Windows命令行教程 用你的终端做一些事情 (com ...
- mysql命令行的导入导出sql,txt,excel(都在linux或windows命令行操作)(转自筑梦悠然)
原文链接https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/73805962 Mysql导入导出sql,txt,excel 首先我们通过命令行 ...
- 解决python执行linux查看文件命令后,因为^@特殊符号导致部分内容不显示的问题
问题现象 文件a的内容如下: 查看第3行到第5行的内容:sed -n '3,5p' /tmp/test/a 可见在命令行执行,是没有问题的. 在python中使用paramiko模块执行linux命令 ...
- golang执行linux命令
golang exec 执行系统命令 golang 2014-09-25 13:17:44 2779 0 0 exec.Command() 最简单的方法: cmd := exe ...
- Windows 通过批处理自动执行 linux服务器上面命令的办法
1. 使用putty 下载地址 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 直接使用 exe版本就可以 https:/ ...
- linux、WINDOWS命令行下查找和统计行数
linux : 例子: netstat -an | grep TIME_WAIT | wc -l | 管道符 grep 查找命令 wc 统计命令 windows: 例子: netstat -an | ...
- 大技霸教你远程执行Linux脚本和命令
如果现在需要在 Linux 服务器上执行一系列命令(比如搭建 LNMP 环境)我应该会第一时间想到想办法写个 Shell 脚本,然后扔上去执行以下看看结果. 然而一贯懒惰的我并不想这么去执行 Shel ...
- python执行linux的shell命令
python执行shell脚本常用的方法 import os val=os.system("shell语句") >>> val=os.system(" ...
- linux 远程 windows 命令:rdesktop vs windows mstsc
[root@bass tmp]# which rdesktop /usr/bin/rdesktop [root@bass tmp]# rpm -qf /usr/bin/rdesktop rdeskto ...
随机推荐
- 带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc
如果头文件中有多个类,带有Q_OBJECT的类要放在头文件的第一个类位置,否则可能无法moc
- qtableview 右键菜单弹出及获取数据
connect(tableView, SIGNAL(customContextMenuRequested(const QPoint &)), this,SLOT(slot_tableViewM ...
- DL/T645-2007 及 Modbus-RTU智能电表调试工具
最近在做微信门禁,智能电表采集,智能水表采集项目时,发现网上很多调试工具用起来不顺手,电脑里面起码下了五六个软件. 好不容易弄清楚了,就自己写一个工具,方便自己使用,也顺便造福一下其他人吧
- Ubuntu16.0.4安装OpenCV3.4.2
(1)到官网下载opencv3.4.2,链接:https://opencv.org/releases.html (2)下载opencv_contrib,链接:https://github.com/op ...
- Oracle Spatial分区应用研究之七:同等分区粒度下全局索引优于分区索引的原因分析
1.实验结论 同等分区粒度下,使用分区空间索引进行空间查询,比使用全局空间索引进行查询,对数据字典表的访问次数更多.假设分区数为X,则大概多3X次访问.具体说明见6实验结论. 2.实验目的 在之前的测 ...
- 031 SSM综合练习07--数据后台管理系统--用户详情查询
1.用户详情查询流程分析 2.代码实现 (1)user-list.jsp页面部分代码 点击jsp页面中的详情按钮,发送请求到UserController.java <!--数据列表--> ...
- [转帖](区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗?
(区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗? http://baijiahao.baidu.com/s?id=1600948969290990883&wfr=spide ...
- 使用SSM搭建一个简单的crud项目
使用SSM完成增删查改 前端使用到的技术:ajax,json,bootstrap等 完整项目地址:点这里GitHub 项目地址,可以在线访问 这一章节主要搭建SSM的环境. SpringMVC Spr ...
- Python的正则表达式和爬虫
1.常用元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 2.常用限 ...
- Python3 - Bytes类型
Python3 新增 bytes 类型,是指一堆字节的集合,十六进制表现形式,两个十六进制数构成一个 byte ,以 b 开头的字符串都是 bytes 类型. 计算机只能存储二进制,字符.图片.视频. ...