execute.go 774 B

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