go每日一库 [cmd]

本文最后更新于:2021年4月1日 下午

关于我

我的博客|文章首发

使用go执行系统命令和二进制文件也是我们在编码过程中常常要使用到的功能。

go本身的包os/exec包含了对应的实现,接下来我们举个例子说明一下

执行 go version 打印go版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import (
"fmt"
"log"
"os/exec"
)

func main() {
cmdOutput, err := exec.Command("go", "version").Output()
if err != nil {
log.Fatal(err)
}

fmt.Printf("%s", cmdOutput)
}

当然实际的使用过程中肯定会伴随其他的场景。例如设置工作目录,设置执行超时等特殊需求,这个时候原生库的编码就会让人很难受。

今天在这里推荐一个可以在linux/windows/darwin 上执行命令的golang开源库,这个库的Star虽然不是很高,但是封装后的api使用起来还算舒服。还是通过几个例子来进行一下说明

shell脚本 输入文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"

"github.com/commander-cli/cmd"
)

func cmdLibraryUse() {
c := cmd.NewCommand("echo text-cmd-shell")

err := c.Execute()
if err != nil {
panic(err.Error())
}

fmt.Printf("%s", c.Stdout())
fmt.Println("stderr is " + c.Stderr())
}

写入标准出入流媒

1
2
c := cmd.NewCommand("echo hello", cmd.WithStandardStreams)
c.Execute()

其他用法大家可以参照官方示例,如果大家有其他更好的cmd封装库可以推荐给我,大家一起学习进步。

参考

运行系统命令和二进制文件

commander-cli/cmd

END

欢迎关注公众号 程序员工具集 👍👍 致力于分享优秀的开源项目、学习资源 、常用工具

回复关键词“关注礼包”,送你一份最全的程序员技能图谱。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!