golang 使用os/exec配合context实现的超时机制

时间:2021-05-28 01:00:07

在使用golang开发中,调用外部可执行程序通过exec包是我们常用的方式。如何控制超时请见如下样例:

var (
Timeout = 3 * time.Second
) func Command(name string, arg ...string) ([]byte, error) {
ctxt, cancel := context.WithTimeout(context.Background(), Timeout)
defer cancel() cmd := exec.CommandContext(ctxt, name, arg...) var buf bytes.Buffer
cmd.Stdout = &buf
cmd.Stderr = &buf if err := cmd.Start(); err != nil {
return buf.Bytes(), err
} if err := cmd.Wait(); err != nil {
return buf.Bytes(), err
} return buf.Bytes(), nil
}

进一步优化请见下文。

https://www.jianshu.com/p/e147d856074c

golang 使用os/exec配合context实现的超时机制的更多相关文章

  1. golang中os/exec包用法

    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. 1.func LookPath(file string) ( ...

  2. Golang os/exec 实现

    os/exec 实现了golang调用shell或者其他OS中已存在的命令的方法. 本文主要是阅读内部实现后的一些总结. 如果要运行ls -rlt,代码如下: package main import ...

  3. [golang][译]使用os/exec执行命令

    [golang][译]使用os/exec执行命令 https://colobu.com/2017/06/19/advanced-command-execution-in-Go-with-os-exec ...

  4. golang os/exec 执行外部命令

    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. func LookPath(file string) (st ...

  5. golang语言中os/exec包的学习与使用

    package main; import ( "os/exec" "fmt" "io/ioutil" "bytes" ) ...

  6. [go]os/exec执行shell命令

    // exec基础使用 import ( "os/exec" ) cmd = exec.Command("C:\\cygwin64\\bin\\bash.exe&quot ...

  7. go os/exec执行外部程序

    Go提供的os/exec包可以执行外部程序,比如调用系统命令等. 最简单的代码,调用pwd命令显示程序当前所在目录: package main import ( "fmt" &qu ...

  8. 转---python os.exec*()家族函数的用法

    execl(file, arg0,arg1,...) 用参数列表arg0, arg1 等等执行文件 execv(file, arglist) 除了使用参数向量列表,其他的和execl()相同 exec ...

  9. Oracle的 EXEC SQL CONTEXT学习

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL杂记页     回到*页面:PostgreSQL索引页 [作者 高健@博客园  luckyjackgao@gmail. ...

随机推荐

  1. JAVA多态

    多态是指当系统A访问系统B的服务时,系统B可以通过多种方式来提供服务,而这一切对系统A是透明的.比如动物园的饲养员能够给各种各样的动物喂食.下图显示了饲养员Feeder,食物Food和动物Animal ...

  2. jQuery EasyUI 使用笔记

    大家有四次抢票机会.第一次是放票时间之后的30分钟.第二次机会是开车前的15天.第三个机会是开车前的48小时.第四个机会是开车前的24小时. $("#gys_key").combo ...

  3. tips of my ubuntu 16.04 LTS

    update_0 : sudo .../idea.sh 才会把idea安装上,不加sudo也会启动,但是不会在开始菜单中找到程序. ---------------------------------- ...

  4. Linux在Hyper-V中实现与Windows的宽带共享上网

    相信不少读者都会做(或者曾经做过)这么一项活动——把一个Linux系统安装到Windows系统下的虚拟机软件中,然后在Windows这个大环境中对Linux进行学习或者一些实验操作.在进行这么一项活动 ...

  5. iOS学习笔记---c语言第二天

    一.bool布尔类型    c语言没有bool类型,oc里有bool类型 是一种非真即假的数据类型,布尔类型的变量只有yes和no两个值.yes表示表达式是真,no表示表达式是假. 在c语言中认为非0 ...

  6. Http请求通信(工具类)

    Http请求通信(工具类) 异步消息处理流程是: 首先需要在主线程当中创建一个Handle对象,并重写handlerMessage()方法. 然后当子线程中需要进行UI操作时,就创建一个Message ...

  7. 如何结合场景利用block进行回调

    我们在开发中常常会用到函数回调,你可以用通知来替代回调,但是大多数时候回调是比通知方便的,所以何乐而不为呢?如果你不知道回调使用的场景,我们来假设一下: 1.我现在玩手机 2.突然手机没有电了 3.我 ...

  8. [源码分析]StringBuilder

    [源码分析]StringBuilder StringBuilder是继承自AbstractStringBuilder的. 这里附上另外两篇文章的连接: AbstractStringBuilder :  ...

  9. Promise 返回值

    then 和 catch 中返回 promise,会在这个 promise resolve 或 reject 的时候,把 resolve 或 reject 的结果作为参数传给后面的 then 或 ca ...

  10. Eclipse插件开发教程-插件的导出和安装应用

    Eclipse插件可以给开发人员提供不少便利,在很多场景下,插件甚至是必不可少的.那么怎么自己开发一个插件呢?前面两篇讲了怎么开发插件,那么开发完了Eclipse插件之后,怎么使用呢?下面就讲讲插件的 ...