diff options
Diffstat (limited to 'client/go/internal/osutil/run_cmd.go')
-rw-r--r-- | client/go/internal/osutil/run_cmd.go | 42 |
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 +} |