在 Go 语言中调用外部 Linux 命令可以通过标准的 os/exec 包实现,我们一般的使用方式如下:
1 | package main |
上面这种使用方式虽然能获取到外部命令的执行结果输出 output,但是必须得命令执行完成后才将获取到的结果一次性返回。很多时候我们是需要实时知道命令执行的输出,比如我们调用一个外部的服务构建命令: mvn build
,这种情况下实时输出命令执行的结果对我们来说很重要。再比如我们 ping 远程 IP,需要知道实时输出,如果直接 ping 完在输出,在使用上来说体验不好。
要实现外部命令执行结果的实时输出,需要使用 Cmd
结构的 StdoutPipe()
方法创建一个管道连接到命令执行的输出,然后用 for 循环从管道中实时读取命令执行的输出并打印到终端。具体代码如下:
1 | func RunCommand(name string, arg ...string) error { |