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