code: func BufferedExec(name string, args ...string) (*BufferedCmd, error) {
  	cmd := ExecCommand(name, args...)
  	stdout, err := cmd.StdoutPipe()
  	if err != nil {
  		return nil, err
  	}
  	stderr, err := cmd.StderrPipe()
  	if err != nil {
  		return nil, err
  	}
  
  	stdin, err := cmd.StdinPipe()
  	if err != nil {
  		return nil, err
  	}
  
  	if err := cmd.Start(); err != nil {
  		return nil, err
  	}
  
  	return &BufferedCmd{
  		cmd,
  		stdin,
  		bufio.NewReaderSize(stdout, stdoutBufSize),
  		bufio.NewReaderSize(stderr, stdoutBufSize),
  	}, nil
  }
docs: // BufferedExec starts up a command and creates a stdin pipe and a buffered
  // stdout & stderr pipes, wrapped in a BufferedCmd. The stdout buffer will be
  // of stdoutBufSize bytes.