Skip to content
Snippets Groups Projects
Select Git revision
  • 3fec23eb48c5244ccbdd366a8534a00263610445
  • master default protected
  • 0.1.1
  • 0.1.0
4 results

run.go

Blame
  • run.go 844 B
    package main
    
    import (
    	"bytes"
    	"log"
    	"os/exec"
    	"syscall"
    )
    
    func runCommand(name string, args ...string) (stdout string, stderr string, exitCode int) {
    	var outbuf, errbuf bytes.Buffer
    
    	cmd := exec.Command(name, args...)
    	cmd.Stdout = &outbuf
    	cmd.Stderr = &errbuf
    
    	err := cmd.Run()
    	stdout = outbuf.String()
    	stderr = errbuf.String()
    
    	if err != nil {
    		// try to get the exit code
    		if exitError, ok := err.(*exec.ExitError); ok {
    			ws := exitError.Sys().(syscall.WaitStatus)
    			exitCode = ws.ExitStatus()
    		} else {
    			log.Printf("Could not get exit code for failed program: %v, %v", name, args)
    			exitCode = exitCodeCatchAll
    			if stderr == "" {
    				stderr = err.Error()
    			}
    		}
    	} else {
    		// success, exitCode should be 0 if go is ok
    		ws := cmd.ProcessState.Sys().(syscall.WaitStatus)
    		exitCode = ws.ExitStatus()
    	}
    
    	return
    }