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 }