当前位置: 首页 > news >正文

golang调用外部程序包os/exec中的 Command和CommandContext 函数创建的Cmd对象的区别

在go语言中,我们可以通过os/exec包中的Command和CommandContext 函数创建对应的外部程序执行Cmd对象, 这2个函数创建的cmd命令执行对象是有区别的,CommandContext创建的对象可以携带上下文,这个主要用于我们通过cancel函数给对应的执行程序发送强制退出命令。

下面我们使用简单的调用系统中的ping命令来演示这2个函数的区别:

exec.Command函数创建Cmd命令对象示例

// ping命令
func TestExecPing(t *testing.T) {cmd := exec.Command("ping", "www.baidu.com")cmd.Stdout = os.Stdoutfmt.Println("将要执行的命令: ", cmd.String())cmd.Run() // 这个会一直执行,因为ping命令会一直执行
}

exec.CommandContext函数创建Cmd命令对象示例


// 带执行上下文的ping命令
func TestExecPingWithTimeout(t *testing.T) {// 获取一个超时上下文对象ctx,和对应的cancel函数ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)defer cancel()// 创建一个带上下文的命令Cmd对象cmd := exec.CommandContext(ctx, "ping", "www.baidu.com")cmd.Stdout = os.Stdoutfmt.Println("将要执行的命令: ", cmd.String())cmd.Run() // 这个将在10秒钟后 强制结束ping命令并退出}

总结

通过上面示例,我们可以清除的看出, 使用Command函数创建的ping命令会一直执行下去,除非我们手动ctrl+c 取消他, 而CommandContext函数创建的cmd对象 ,我们给ping命令传递了一个超时的上下文,这样程序在指定的时间后就自动退出了。 显然CommandContext的方式更为灵活和可控。

http://www.lryc.cn/news/369628.html

相关文章:

  • Redis进阶知识个人汇总
  • 从中序与后序遍历序列构造二叉树-力扣
  • 操作系统期末复习(大题)
  • 解决富文本中抖音视频无法播放的问题——403
  • 2024最新华为OD机试(C卷+D卷)真题目录+使用说明+在线评测
  • hana 中的缓存视图功能,类似ORACLE 中的 物化视图功能
  • express入门02静态资源托管
  • Java常见的引用类型
  • 使用易备数据备份软件,简单快速地备份 Oracle 数据库
  • 基于SSM+Jsp的交通事故档案管理系统
  • 深度解析:ChatGPT全面测评——功能、性能与用户体验全景剖析
  • 领夹麦克风哪个品牌好?哪个麦克风好?揭秘无线麦克风十大排名!
  • 低代码开发:智能财务系统开发应用
  • Windows 10 找不到Microsoft Edge 浏览器
  • 【react】useState 使用指南
  • RK3588 Debian11进行源码编译安装Pyqt5
  • 二叉树的前序遍历-力扣
  • 千问Qwen7B chat:本地部署及网页端使用
  • (27)ADC接口--->(002)FPGA实现AD7606接口
  • 设计模式-设计模式分类
  • 重邮计算机网络803-(1)概述
  • 党史馆3d网上展馆
  • 小心人工智障
  • [AIGC] 自定义Spring Boot中BigDecimal的序列化方式
  • ubuntu20.04设置文件开机自启动
  • 盛水最多的容器
  • PCIe——学习计划
  • 使用 TinyEngine 低代码引擎实现三方物料集成
  • 武汉理工大学云计算与服务计算——7.容器技术习题
  • idea项目启动报错org/springframework/cloud/client/circuitbreaker/Customizer