最近正在用go写一个各语言的lint server,需要调用外部的命令,所以这里整理一下用到的方法。
Command
在os/exec
包中有一个 type 叫 cmd
,定义如下:
1 | type Cmd struct { |
介绍如下:
1 | Cmd represents an external command being prepared or run. |
可以看到局限性在于只能run一次。不过没关系,对于大部分情况是够用了的。
那么我们应该怎么去用这个东西呢?
go 标准库提供了这么一个函数用来创建cmd:
1 | func Command(name string, arg ...string) *Cmd |
这个函数返回了一个填充了Path
和Args
的Cmd对象
如果说在name
中有路径分隔符(path separator),那么Command
会自动在系统设定的path中寻找这个命令,如果没找到的话就直接把输入的name当作path。
我们只要用
1 | cmd := exec.Command("ls", "-a", "-l", "-h") //实际可以直接写成-alh |
这样就可以获得到cmd执行后的结果。
在Cmd
上有好几个函数可以做到获得输出,比较常用的是
1 | func (c *Cmd) CombinedOutput() ([]byte, error) |
这个函数会先运行(run)这个cmd,然后再把stdout和stderr的输出放在一起返回。
除此之外,还有比如:
1 | func (c *Cmd) Output() ([]byte, error) |
等函数可以使用,具体可以查询标准库
除此之外,还有比如StartProcess
之类的函数可以使用,大家可以自行尝试一下。