aboutsummaryrefslogtreecommitdiffstats
path: root/client/go/internal/osutil/run_cmd.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/go/internal/osutil/run_cmd.go')
-rw-r--r--client/go/internal/osutil/run_cmd.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/client/go/internal/osutil/run_cmd.go b/client/go/internal/osutil/run_cmd.go
new file mode 100644
index 00000000000..ca0d621f9f9
--- /dev/null
+++ b/client/go/internal/osutil/run_cmd.go
@@ -0,0 +1,42 @@
+// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package osutil
+
+import (
+ "bytes"
+ "os"
+ "os/exec"
+ "strings"
+
+ "github.com/vespa-engine/vespa/client/go/internal/admin/trace"
+)
+
+type BackTicks int
+
+const (
+ BackTicksWithStderr BackTicks = iota
+ BackTicksIgnoreStderr
+ BackTicksForwardStderr
+ SystemCommand
+)
+
+func (b BackTicks) Run(program string, args ...string) (string, error) {
+ cmd := exec.Command(program, args...)
+ var out bytes.Buffer
+ cmd.Stdout = &out
+ switch b {
+ case BackTicksWithStderr:
+ cmd.Stderr = &out
+ case BackTicksIgnoreStderr:
+ cmd.Stderr = nil
+ case BackTicksForwardStderr:
+ cmd.Stderr = os.Stderr
+ case SystemCommand:
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ }
+ trace.Debug("running command:", program, strings.Join(args, " "))
+ err := cmd.Run()
+ return out.String(), err
+}