mirror of https://github.com/databricks/cli.git
33 lines
678 B
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
|
|
}
|