exec.go 661 B

1234567891011121314151617181920212223242526272829303132
  1. package exe
  2. import (
  3. "os"
  4. "os/exec"
  5. "strings"
  6. )
  7. type Runner interface {
  8. Capture(cmd *exec.Cmd) (stdout string, stderr string, err error)
  9. Show(cmd *exec.Cmd) error
  10. }
  11. type OSRunner struct{}
  12. func (r *OSRunner) Show(cmd *exec.Cmd) error {
  13. cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
  14. return cmd.Run()
  15. }
  16. func (r *OSRunner) Capture(cmd *exec.Cmd) (stdout, stderr string, err error) {
  17. outbuf, err := cmd.Output()
  18. stdout = strings.TrimSpace(string(outbuf))
  19. if err != nil {
  20. if exitErr, isExitError := err.(*exec.ExitError); isExitError {
  21. stderr = strings.TrimSpace(string(exitErr.Stderr))
  22. }
  23. }
  24. return stdout, stderr, err
  25. }