execute.go 732 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package cmd
  2. import (
  3. "fmt"
  4. "os/exec"
  5. "strings"
  6. )
  7. /*
  8. @Description : execute a command in windows cmd
  9. */
  10. func Command(exe string, args []string) (result string, err error) {
  11. cmd := exec.Command(exe, args...)
  12. // 命令的错误输出和标准输出都连接到同一个管道
  13. stdout, _ := cmd.StdoutPipe()
  14. cmd.Stderr = cmd.Stdout
  15. err = cmd.Start()
  16. if err != nil {
  17. XWarning(fmt.Sprintf("cmd.Start error : %v\n", err))
  18. return
  19. }
  20. var rets []string
  21. // 从管道中实时获取输出并打印到终端
  22. for {
  23. tmp := make([]byte, 1024)
  24. _, err := stdout.Read(tmp)
  25. if err != nil {
  26. break
  27. }
  28. rets = append(rets, ConvertByte2String(tmp, "GB18030"))
  29. }
  30. result = strings.Join(rets, "\n")
  31. return result, nil
  32. }