package executor import ( "bufio" "io" "os/exec" ) func ReadTimeCommandExecutor(singleLineCommand []string) []string { cmd := exec.Command(singleLineCommand[0], singleLineCommand[1:]...) stdout, err := cmd.StdoutPipe() if err != nil { log.ErrorF("command %v stdout error => %v", singleLineCommand, err) } stderr, err := cmd.StderrPipe() if err != nil { log.ErrorF("command %v stderr error => %v", singleLineCommand, err) } if err := cmd.Start(); err != nil { log.ErrorF("command %v runtime error => %v", singleLineCommand, err) } var resultSlice []string resultSlice = append(resultSlice, copyOutput(stdout, resultSlice)...) resultSlice = append(resultSlice, copyOutput(stderr, resultSlice)...) if err := cmd.Wait(); err != nil { log.ErrorF("command %v result error => %v", singleLineCommand, err) } //log.DebugF("real time exec result are %v", resultSlice) return resultSlice } func copyOutput(r io.Reader, resultSlice []string) []string { scanner := bufio.NewScanner(r) for scanner.Scan() { resultLine := scanner.Text() resultSlice = append(resultSlice, resultLine) // debug usage //fmt.Println(resultLine) } return resultSlice }