返回顶部
首页 > 资讯 > 后端开发 > GO >Golang操作命令行的几种方式总结
  • 495
分享到

Golang操作命令行的几种方式总结

2024-04-02 19:04:59 495人浏览 泡泡鱼
摘要

目录前言简单使用使用shell执行命令简单封装Shell执行命令前言 在实际开发工作中,我们经常使用命令行进行日志分析、程序部署、debug程序等工作。在linux下,|、grep、

前言

在实际开发工作中,我们经常使用命令行进行日志分析、程序部署、debug程序等工作。在linux下,|、grep、find、xagrs、awk等工具是非常强大的,可以很容易的完成各种数据处理。在需求比较简单的情况下,我们会直接命令行;如果再复杂一点,我们会编写简单的Shell脚本;如果业务更加复杂,shell已经不适合进行处理了,我们就会使用我们熟悉的语言进行编码,如果你刚好使用golang,那么可以使用Golang内置的exec.Command完成命令行操作。

简单使用

func main() {
        // # grep 321 2022053015.log
	command := exec.Command("grep", "321", "2022053015.log")
	out := bytes.NewBuffer(nil)
	command.Stdout = out
	command.Stderr = os.Stderr
	if err := command.Run(); err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String())
}

上面的代码是最简单的一种使用命令行工具的方式,它会直接调用对应工具的程序,然后获取执行结果。然而,如果像下面这样包含通配符,是无法实现我们想要的效果的。因为通配符是Shell程序进行处理的,而我们这里是直接调用grep程序,因此只会去查询是否有精准匹配20220530*.log名字的文件,不会展开*

func main() {
	// # grep 321 20220530*.log
	command := exec.Command("grep", "321", "20220530*.log")
	out := bytes.NewBuffer(nil)
	command.Stdout = out
	command.Stderr = os.Stderr
	if err := command.Run(); err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String()) 
}

使用Shell执行命令

为了能够使用Shell的能力,我们需要先进入Shell上下文,再输入我们需要的命令。

func main() {
        // 进入Shell上下文
	command := exec.Command("sh")
	in := bytes.NewBuffer(nil)
	out := bytes.NewBuffer(nil)
	command.Stdin = in
	command.Stdout = out
	command.Stderr = os.Stderr
        // 输入命令,记得每个命令最后以换行符结束,这样Shell才会执行这个命令
	grepCmd := fmt.Sprintf("grep %s %s*.log\n", "321", "20220530")
	in.WriteString(grepCmd)
        // 完成之后退出Shell上下文
	in.WriteString("exit\n")
	if err := command.Run(); err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String())
}

简单封装Shell执行命令

上面的代码核心只有grepCmd := fmt.Sprintf("grep %s %s*.log\n", "321", "20220530")这一行,其他的基本上都是模板代码,因此最好简单封装一下,避免到处拷贝代码。

// 执行shell命令
func Exec(cmd string) (*bytes.Buffer, error) {
	command := exec.Command("sh")
	in := bytes.NewBuffer(nil)
	out := bytes.NewBuffer(nil)
	command.Stdin = in
	command.Stdout = out
	command.Stderr = os.Stderr
	in.WriteString(cmd)
	in.WriteString("exit\n")
	return out, command.Run()
}
func main() {
	grepCmd := fmt.Sprintf("grep %s %s*.log\n", "321", "20220530")
	out, err := Exec(grepCmd)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String())
}

到此这篇关于Golang操作命令行的几种方式总结的文章就介绍到这了,更多相关Golang命令行操作内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Golang操作命令行的几种方式总结

本文链接: https://lsjlt.com/news/121203.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang操作命令行的几种方式总结
    目录前言简单使用使用Shell执行命令简单封装Shell执行命令前言 在实际开发工作中,我们经常使用命令行进行日志分析、程序部署、debug程序等工作。在Linux下,|、grep、...
    99+
    2024-04-02
  • android操作XML的几种方法总结
    XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现。其标准型,可靠性,安全性......毋庸置疑。在android平台上,我们要想实现数据存储和数据...
    99+
    2022-06-06
    XML 方法 Android
  • Redis操作命令总结
    一、key pattern 查询相应的key   (1)redis允许模糊查询key  有3个通配符 *、?、[]   (2)randomkey:返回随机key     (3)type key:返...
    99+
    2022-06-04
    命令 操作 Redis
  • python运行cmd命令行的3种方法总结
    目录1.执行cmd命令,不显示执行过程中弹出的黑框2.执行cmd命令,并得到执行后的返回值,python调试界面输出返回值3.执行cmd命令,并得到执行后的返回值,python调试界...
    99+
    2024-04-02
  • js执行shell命令的几种方式(Node)
    目录前言调起shell的几种方式介绍(不限于这几种)1、child_process2、shelljs3、simple-git总结在做一个客户端基建项目的时候,多处需要用到JS调取命令...
    99+
    2024-04-02
  • PHP操作文件的命令总结
    本篇内容主要讲解“PHP操作文件的命令总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP操作文件的命令总结”吧!PHP 包含文件PHP include 和 require 语句在 PHP ...
    99+
    2023-06-04
  • Mac终端操作命令总结
    1、操作终端的常用命令 快速打开:command+空格,输入ter回车多个窗口:command+N(光标在终端执行此操作)多个标签页:command+T(光标在终端执行此操作) 2、目录和文件操作 命令名功能描述举例或备注cd进入指定文件夹...
    99+
    2023-09-04
    linux 运维 服务器
  • 命令执行各种绕过总结
    最近做了题目很多都有命令执行的,这里给自己做一次总结,也给大家一个参考。 这里我感觉对于大家经典rce中可能会收获不少东西,祝愿大家在ctf的道路上越走越远 目录 linux绕过 1.空格绕过 2.关键字绕过 1.过滤cat之类 通配符 2...
    99+
    2023-09-05
    php 学习 linux 开发语言 经验分享 1024程序员节
  • Spring AOP的几种实现方式总结
    Spring AOP的几种实现方式总结如下:1. 基于XML配置:在Spring配置文件中使用元素来定义切面和通知的配置,然后通过元...
    99+
    2023-08-17
    Spring AOP
  • MySql常用表操作命令总结
    本篇内容介绍了“MySql常用表操作命令总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1:使用SH...
    99+
    2024-04-02
  • 修改request的parameter的几种方式总结
    修改request的parameter的几种方式总结 这篇文章仅仅用来参考,本身不想写,request之所以不想让你修改parameter的值,就是因为这个东西一般不然改,有人问我为...
    99+
    2024-04-02
  • golang获取变量或对象类型的几种方式总结
    目录fmt.Printf("%T")方式用fmt.Printf("%T")实现返回变量类型的函数 reflect.TypeOf方式用...
    99+
    2022-12-26
    golang获取变量 golang 变量 golang 函数变量
  • SQL INSERT及批量的几种方式总结
    目录1、常规INSERT写法2、SELECT语句返回值INSERT3、批量多行INSERT附:插入检索出的数据总结1、常规INSERT写法 INSERT INTO ...&n...
    99+
    2023-02-02
    sql insert批量 sql insert语句
  • SQL INSERT及批量的几种方式总结
    目录1、常规INSERT写法2、SELECT语句返回值INSERT3、批量多行INSERT附:插入检索出的数据总结1、常规INSERT写法 INSERT INTO ...  VALUES (....
    99+
    2023-02-02
    sql insert批量 sql insert语句
  • uniapp定义动画的几种方式总结
    目录1. 直接使用 CSS 动画1.1 定义动画1.2 使用2. 通过 uniapp 提供编程式创建动画2.1 定义动画2.1.1 创建动画实例2.1.2 调用实例方法来描述动画3....
    99+
    2023-02-08
    uniapp 动画效果 uniapp 动画 uniapp定义动画
  • Gson中@JsonAdater注解的几种方式总结
    目录Gson @JsonAdater注解的几种方式总结问题描述方式一方式二-write原样方式三-简单写法Gson注解@SerializedNameExposeGson @JsonA...
    99+
    2024-04-02
  • Dubbo本地调试的几种方式总结
    目录前言开发调试阶段已发布测试阶段总结前言 在正常的dubbo开发迭代过程,本地调试是比较常见的情况,一般来说,主要以下两种情况我们需要本地调试 dubbo服务开发调试阶段: 这个阶...
    99+
    2022-11-13
    dubbo本地调试最好的方法 dubbo调试工具 dubbo本地调试
  • Linux系统下Git操作命令总结
    本篇内容主要讲解“Linux系统下Git操作命令总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统下Git操作命令总结”吧!显示当前的配置信息代码如下:git config --l...
    99+
    2023-06-12
  • Python操作Hive的两种方法总结
    方法一:使用PyHive库 安装依赖包:其中sasl安装可能会报错,可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/#sasl下载对应版本安装。 pip install sasl pip in...
    99+
    2023-01-31
    两种 操作 方法
  • Python中几种导入模块的方式总结
    模块内部封装了很多实用的功能,有时在模块外部调用就需要将其导入。常见的方式有如下几种: 1 . import >>> import sys >>> sys.path ...
    99+
    2022-06-04
    几种 模块 方式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作