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

在使用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 

 

posted @ 2018-05-15 10:45  shhnwangjian  阅读(4021)  评论(0编辑  收藏  举报