| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | 
							- package utils
 
- import (
 
- 	"bytes"
 
- 	"context"
 
- 	"os/exec"
 
- 	"pbx-api-gin/pkg/lfshook"
 
- 	"time"
 
- )
 
- //ExecCmdAsync 执行指定命令
 
- func ExecCmdAsync(cmdName string, arg ...string) (stdOut, errOut string, err error) {
 
- 	cmd := exec.Command(cmdName, arg...)
 
- 	var stdout, stderr bytes.Buffer
 
- 	cmd.Stdout = &stdout
 
- 	cmd.Stderr = &stderr
 
- 	err = cmd.Run()
 
- 	if err != nil {
 
- 		lfshook.NewLogger().Errorf("cmd.Run(%s) failed with %s\n", cmdName, err)
 
- 	}
 
- 	outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes())
 
- 	if len(outStr) > 0 {
 
- 		lfshook.NewLogger().Debugf("cmd.Run(%s) %s", cmdName, outStr)
 
- 	}
 
- 	if len(errStr) > 0 {
 
- 		lfshook.NewLogger().Errorf("cmd.Run(%s)%s", cmdName, errStr)
 
- 	}
 
- 	return outStr, errStr, err
 
- }
 
- //ExecCmd 执行指定命令
 
- func ExecCmd(cmdName string, arg ...string) (stdOut, errOut string, err error) {
 
- 	cmd := exec.Command(cmdName, arg...)
 
- 	var stdout, stderr bytes.Buffer
 
- 	cmd.Stdout = &stdout
 
- 	cmd.Stderr = &stderr
 
- 	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
 
- 	defer cancel()
 
- 	err = cmd.Start()
 
- 	if err != nil {
 
- 		lfshook.NewLogger().Error(err)
 
- 		return "", "", err
 
- 	}
 
- 	go func() {
 
- 		err = cmd.Wait()
 
- 		if err != nil {
 
- 			lfshook.NewLogger().Errorf("cmd.Wait(%s) %s\n", cmdName, err)
 
- 		} else {
 
- 			lfshook.NewLogger().Info("cmd.Wait(%s)\n", cmdName)
 
- 		}
 
- 		cancel()
 
- 	}()
 
- 	select {
 
- 	case <-ctx.Done():
 
- 	}
 
- 	outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes())
 
- 	if len(outStr) > 0 {
 
- 		lfshook.NewLogger().Debugf("cmd.Start(%s) %s", cmdName, outStr)
 
- 	}
 
- 	if len(errStr) > 0 {
 
- 		lfshook.NewLogger().Errorf("cmd.Start(%s)%s", cmdName, errStr)
 
- 	}
 
- 	return outStr, errStr, err
 
- }
 
 
  |