databricks-cli/libs/process/background.go

33 lines
678 B
Go

package process
import (
"bytes"
"context"
"fmt"
"os"
"os/exec"
"strings"
"github.com/databricks/cli/libs/log"
)
func Background(ctx context.Context, args []string, opts ...execOption) (string, error) {
commandStr := strings.Join(args, " ")
log.Debugf(ctx, "running: %s", commandStr)
cmd := exec.CommandContext(ctx, args[0], args[1:]...)
stdout := &bytes.Buffer{}
cmd.Stdin = os.Stdin
cmd.Stdout = stdout
cmd.Stderr = stdout
for _, o := range opts {
err := o(cmd)
if err != nil {
return "", err
}
}
if err := cmd.Run(); err != nil {
return "", fmt.Errorf("%s: %s", commandStr, stdout.String())
}
return strings.TrimSpace(stdout.String()), nil
}