github.com/mweagle/Sparta@v1.15.0/system/exec.go (about)

     1  package system
     2  
     3  import (
     4  	"io"
     5  	"os/exec"
     6  
     7  	"github.com/sirupsen/logrus"
     8  )
     9  
    10  // RunOSCommand properly executes a system command
    11  // and writes the output to the provided logger
    12  func RunOSCommand(cmd *exec.Cmd, logger *logrus.Logger) error {
    13  	logger.WithFields(logrus.Fields{
    14  		"Arguments": cmd.Args,
    15  		"Dir":       cmd.Dir,
    16  		"Path":      cmd.Path,
    17  		"Env":       cmd.Env,
    18  	}).Debug("Running Command")
    19  	outputWriter := logger.Writer()
    20  	cmdErr := RunAndCaptureOSCommand(cmd,
    21  		outputWriter,
    22  		outputWriter,
    23  		logger)
    24  	closeErr := outputWriter.Close()
    25  	if closeErr != nil {
    26  		logger.WithField("closeError", closeErr).Warn("Failed to close OS command writer")
    27  	}
    28  	return cmdErr
    29  }
    30  
    31  // RunAndCaptureOSCommand runs the given command and
    32  // captures the stdout and stderr
    33  func RunAndCaptureOSCommand(cmd *exec.Cmd,
    34  	stdoutWriter io.Writer,
    35  	stderrWriter io.Writer,
    36  	logger *logrus.Logger) error {
    37  	logger.WithFields(logrus.Fields{
    38  		"Arguments": cmd.Args,
    39  		"Dir":       cmd.Dir,
    40  		"Path":      cmd.Path,
    41  		"Env":       cmd.Env,
    42  	}).Debug("Running Command")
    43  	cmd.Stdout = stdoutWriter
    44  	cmd.Stderr = stderrWriter
    45  	return cmd.Run()
    46  
    47  }