Go 语言 exec 实时获取外部命令的执行输出

2023-05-16

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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go 语言 exec 实时获取外部命令的执行输出 的相关文章

随机推荐

  • windows10快捷键(windows10常用快捷键大全)

    时间就是金钱 xff0c 那么我们该如何提升办公效率已经变得非常的必须 xff0c 能用键盘操作的东西 xff0c 几乎不用鼠标去点击 xff0c 所以快捷键就变得非常的重要 那么今天就和大家一起来分享Windows 10的各种快捷键 Wi
  • 影响SQL Server数据库应用性能的几个常见因素 (2012/1/18)

    转自 xff1a http blogs msdn com b apgcdsd archive 2012 01 18 sql server 2012 1 18 aspx 影响SQL Server数据库应用性能的几个常见因素 性能问题是困扰数据
  • 字符移位(腾讯2017实习生)

    字符移位 1 题目 xff1a 小Q最近遇到了一个难题 xff1a 把一个字符串的大写字母放到字符串的后面 xff0c 各个字符的相对位置不变 xff0c 且不能申请额外的空间 你能帮帮小Q吗 xff1f 输入描述 输入数据有多组 xff0
  • 【群晖Nas开启WebDAV服务,路由器映射端口,实现Win10远程映射网路驱动器】

    群晖Nas开启WebDAV服务 xff0c 路由器映射端口 xff0c 实现Win10远程映射网路驱动器 群晖Nas开启WebDAV服务路由器映射端口实现Win10远程映射网路驱动器 群晖Nas开启WebDAV服务 登录群晖 xff0c 在
  • 租用游艇问题 石子合并问题 动态规划实验

    实验名称 xff1a 动态规划 一 实验预习 1 实验目的 1 理解并掌握动态规划方法的设计思想 xff1b 2 提高应用动态规划方法解决问题和设计算法的能力 xff1b 3 通过编程实现租用游艇问题和石子合并问题 xff0c 进一步理解动
  • django项目初始化

    django项目初始化 1 为了方便管理app xff0c 我们添加专门的apps文件夹来存放所有的app 结构如下 1 1设置完apps文件夹以后我们需要对配置文件做相应的更改 1 1 1 在seetings py里添加django文件的
  • 关于 Linux 输入正确账号密码显示 Sorry,that did not work的问题

    解决办法 xff1a 1 设置用户名时不要以数字开头 xff0c 字母和下划线都是可以的 xff0c 2 字母设置时记得开没开大小写 xff0c 在输入账号密码时大写Capslock是没用的 xff0c 要 shift 43 字母 xff0
  • 最小二乘与最大似然估计之间的关系

    在测量误差服从高斯分布的情况下 xff0c 最小二乘法等价于极大似然估计 Ref xff1a 最小二乘法与极大似然估计的区别与联系 最小二乘与最大似然估计之间的关系
  • Python使用pydub库对mp3与wav格式进行互转的方法

    我们需要用到一个叫pydub的类库 xff0c pydub是python的高级一个音频处理库 xff0c 可以让你以一种不那么蠢的方法处理音频 开发者原话 1 https github com jiaaro pydub 附上开发者的gith
  • 安装docker,vulhub

    1 sudo apt install apt transport https ca certificates curl gnupg agent software properties common 2 curl fsSL https dow
  • 5GC移动性管理(5GS mobility management ,5GMM)

    主要内容 介绍5GC中移动性管理功能的实现 注册管理状态模型连接管理状态模型UE Context的构成用户标识符 xff08 SUPI SUCI PEI等 xff09 移动性管理限制及术语 xff08 注册区 禁止区域 服务受限区域 xff
  • 云计算实战系列三(Linux文件管理)

    文件管理 1 Linux目录结构 1 1 WINDOWS LINUX 对比 Windows 以多根的方式组织文件 C D E Linux 以单根的方式组织文件 1 2 简介 目录结构 xff1a FSH Filesystem Hierarc
  • hashCode()和equals()的区别

    一 hashCode 和equals 是什么 xff1f hashCode 方法和equals 方法的作用其实一样 xff0c 在Java里都是用来对比两个对象是否相等一致 二 hashCode 和equals 的区别 下边从两个角度介绍了
  • debian下smplayer播放视频无声音的问题

    请先安装解码器和smplayer 解码器essential 20071007 tar bz2一般都是手动安装 xff0c smplayer使用apt get install即可 安装过程 xff0c 参考mplayer官网步骤 xff1a
  • iOS可视化界面编程XIB简单使用

    iOS的UI界面的编写现在基本分为三个流派 手写代码XIBStoryBoard 三者区别 本文主要介绍XIB的简单使用 xff0c 基于XIB在界面上放几个按钮并生成点击事件代码 以下代码及截图基于XCode12 快速创建 1 创建文本对象
  • 方面情感分析的四个情感元素介绍

    方面情感分析介绍 一般情感分析的问题由两个部分组成 xff1a 目标和情绪 目标可以是实体也可以是实体的某一个属性 xff0c 方面 xff0c 特点等等 xff0c 情绪是表达对目标的感情 xff0c 这里一般是积极 xff0c 消极 x
  • go中使用sqlite

    1 安装mingw64 1 1 下载mingw sqlite作为一个快速开发的数据库 xff0c 理应被go支持 xff0c 但是要在go里面使用sqlite xff0c 实际上是要下载sqlite的源代码编译的 xff0c 当然 xff0
  • map 详解(C++)

    现实中的数据很多是关联的 xff0c 例如书本名称和价格 xff0c 每条数据都含有两部分 xff1a 信息学竞赛一本通 xff1a 80 高等数学 xff1a 27 5 生物信息分析 xff1a 35 5 我们可以使用map存储这类一对一
  • 详解Ubuntu文件的结构

    首先我们知道 xff0c linux系统文件结构和windows系统文件结构不同之处在于 xff0c linux系统文件统一挂载在根目录下的 xff0c 而windows系统的文件是分磁盘挂载的 windows下通常分C盘D盘E盘等 xff
  • Go 语言 exec 实时获取外部命令的执行输出

    Go 语言 exec 实时获取外部命令的执行输出 在 Go 语言中调用外部 Linux 命令可以通过标准的 os exec 包实现 xff0c 我们一般的使用方式如下 xff1a span class token keyword packa