Go 语言 exec 实时获取外部命令的执行输出
2019-07-20 18:19
4367 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qianghaohao/article/details/96614079
Go 语言 exec 实时获取外部命令的执行输出
在 Go 语言中调用外部 Linux 命令可以通过标准的 os/exec 包实现,我们一般的使用方式如下:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("ls", "-al") output, _ := cmd.CombinedOutput() fmt.Println(string(output)) }
上面这种使用方式虽然能获取到外部命令的执行结果输出 output,但是必须得命令执行完成后才将获取到的结果一次性返回。很多时候我们是需要实时知道命令执行的输出,比如我们调用一个外部的服务构建命令:
mvn build,这种情况下实时输出命令执行的结果对我们来说很重要。再比如我们 ping 远程 IP,需要知道实时输出,如果直接 ping 完在输出,在使用上来说体验不好。
要实现外部命令执行结果的实时输出,需要使用
Cmd结构的
StdoutPipe()方法创建一个管道连接到命令执行的输出,然后用 for 循环从管道中实时读取命令执行的输出并打印到终端。具体代码如下:
func RunCommand(name string, arg ...string) error { cmd := exec.Command(name, arg...) // 命令的错误输出和标准输出都连接到同一个管道 stdout, err := cmd.StdoutPipe() cmd.Stderr = cmd.Stdout if err != nil { return err } if err = cmd.Start(); err != nil { return err } // 从管道中实时获取输出并打印到终端 for { tmp := make([]byte, 1024) _, err := stdout.Read(tmp) fmt.Print(string(tmp)) if err != nil { break } } if err = cmd.Wait(); err != nil { return err } return nil }
相关文章推荐
- GO语言运行cmd命令逐行实时输出执行过程
- 用NSTask执行外部命令并获取输出结果的方法
- GO语言运行cmd命令逐行实时输出执行过程
- Cocoa中用NSTask执行外部命令并获取输出结果的方法
- golang go 语言在 window下执行命令 获取本地ip
- 用NSTask执行外部命令并获取输出结果的方法
- 用NSTask执行外部命令并获取输出结果的方法
- 用NSTask执行外部命令并获取输出结果的方法
- 用NSTask执行外部命令并获取输出结果的方法
- [Python]paramiko实时获取命令执行输出及sftp上传
- 用python实时获取shell命令的输出[rsync备份进度]
- Python3 执行系统命令并获取实时回显功能
- Python获取命令实时输出-原样彩色输出并返回输出结果的示例
- VB.net中执行外部CMD命令并获取返回字符串
- Go语言执行系统命令
- shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
- 24 种语言执行外部命令的方法
- Python获取命令实时输出-原样彩色输出并返回输出结果
- C 语言getopt与go语言flag获取命令参数
- PHP 执行系统外部命令 system() exec() passthru()