Go学习笔记(八) | 使用 os/exec 执行命令

用Go去调用一些外部的命令其实很愉快的,这遍文章就总结一下我自己日常用的比较多的几种方法。 关于Unix标准输入输出 在具体聊os/exec的使用前,了解一下shell的标准输出是很有必要的。 我们平常会用到或看到这样的命令: $ ls xxx 1>out.txt 2>&1 $ nohup xxx 2>&1 & 你知道这里1,2含义么? 其实这里的1,2指的就是Unix文件描述符。文件描述符其实就一数字,每一个文件描述符代表的都是一个文件。如果你打开100个文件,你就会获取到100个文件描述符。 这里需要注意的一点就是,在Unix中一切皆文件。当然,这里我们不必去深究,我们需要知道的是1,2代表的是标准输出stdout与标准错误输出stderr。还有0代表标准输入stdin。 在os/exec中就用到了Stdin,Stdout,Stderr,这些基本Unix知识或能帮助我们更好理解这些参数。 os/exec os/exec包内容并不多,我们大概过一下。 LookPath(file string) (string, error) 寻找可执行文件路径,如果你指定的可执行文件在$PATH中,就会返回这个可执行文件的相对/绝对路径;如果你指定的是一个文件路径,他就是去判断文件是否可读取/执行,返回的是一样的路径。 在我们需要使用一些外部命令/可执行文件的时候,我们可以先使用该函数判断一下该命令/可执行文件是否有效。 Command(name string, arg …string) *Cmd 使用你输入的参数,返回Cmd指针,可用于执行Cmd的方法。 这里name就是我们的命令/可执行文件,后面的参数可以一个一个输入。 CommandContext(ctx context.Context, name string, arg …string) *Cmd 和上面功能一样,不过我们可以用上下文做一些超时等控制。 之后几个就是Cmd的一些方法。 (c *Cmd) CombinedOutput() ([]byte, error) 将标准输出,错误输出一起返回; (c *Cmd) Output() ([]byte, error) 输出标准输出,错误从error返回; (c *Cmd) Run() error 执行任务,等待执行完成; (c *Cmd) Start() error, (c *Cmd) Wait() error 前者执行任务,不等待完成,用后者等待,并释放资源; (c *Cmd) StderrPipe() (io....

2019-05-30  ·  Go学习笔记 Go基础  ·  golang

Go学习笔记(三) | 怎么写Go基准测试(性能测试)

或许你经常会思考这样的问题,我用不同的方法实现了同样的效果,哪个会更快?哪个内存消耗更小?这时候你一个简单的基准测试就能解决你的疑惑。 ...

2018-04-25  ·  Go学习笔记 Go基础  ·  benchmark go

Go学习笔记(二) | 我对 recover 的一点误解

在golang的官方介绍中是这么介绍Recover函数的。 ...

2018-01-21  ·  Go学习笔记 Go基础  ·  golang recover

Go学习笔记(一) | postgres与golang点点滴滴

在golang中使用数据库主要依赖database/sql库以及pg的驱动库。而目前我们常用的pg的驱动库是 github.com/lib/pq。这里我想说的不是如何去使用它们,毕竟人家文档已经很详细了,这里主要总结了一下自己日常使用中学到的一些技巧。 ...

2017-11-27  ·  Go学习笔记 Go基础  ·  golang postgres

Gin文件上传与下载

Gin是用Go编写的web框架。性能还不错,而且使用比较简单,还支持RESTful API。 日常的使用中我们可能要处理一些文件的上传与下载,我这里简单总结一下。 ...

2017-03-12  ·  Go学习笔记 Go基础  ·  golang gin