1
0
mirror of https://github.com/IBM/fp-go.git synced 2025-06-21 00:19:34 +02:00
Files
fp-go/internal/exec/exec.go
Dr. Carsten Leue c07df5c771 initial checkin
Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com>
2023-07-07 22:31:06 +02:00

32 lines
734 B
Go

package exec
import (
"bytes"
"context"
"fmt"
"os/exec"
EX "github.com/ibm/fp-go/exec"
T "github.com/ibm/fp-go/tuple"
)
func Exec(ctx context.Context, name string, args []string, in []byte) (EX.CommandOutput, error) {
// command input
cmd := exec.CommandContext(ctx, name, args...)
cmd.Stdin = bytes.NewReader(in)
// command result
var stdOut bytes.Buffer
var stdErr bytes.Buffer
cmd.Stdout = &stdOut
cmd.Stderr = &stdErr
// execute the command
err := cmd.Run()
if err != nil {
err = fmt.Errorf("command execution of [%s][%s] failed, stdout [%s], stderr [%s], cause [%w]", name, args, stdOut.String(), stdErr.String(), err)
}
// return the outputs
return T.MakeTuple2(stdOut.Bytes(), stdErr.Bytes()), err
}