func RunExternalAndStdout(cmd, wd string, argv []string) (stdout []byte, err os.Error) { argv = SplitArgs(argv) var c *exec.Cmd if len(argv) > 0 { c = exec.Command(cmd, argv...) } else { c = exec.Command(cmd) } c.Dir = wd c.Env = os.Environ() bStdout := bytes.NewBuffer(nil) bStderr := bytes.NewBuffer(nil) c.Stdout = bStdout c.Stderr = bStderr err = c.Run() if wmsg, ok := err.(*os.Waitmsg); ok { if wmsg.ExitStatus() != 0 { err = os.NewError(fmt.Sprintf("command: %s %v\n%s\n", cmd, argv, bStderr.String())) } else { err = nil } } else { stdout = bStdout.Bytes() } return }