0
点赞
收藏
分享

微信扫一扫

[数据集][目标检测]手枪检测数据集VOC+YOLO格式3000张1类别

在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.Stdout
fmt.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.Stdout
fmt.Println("将要执行的命令: ", cmd.String())
cmd.Run() // 这个将在10秒钟后 强制结束ping命令并退出

}

总结

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

举报

相关推荐

0 条评论