github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/f/exec_command.go (about) 1 package f 2 3 import ( 4 "bufio" 5 "log" 6 "os/exec" 7 "runtime/debug" 8 ) 9 10 // ExecCommandOutput 执行命令后获取输出结果. 11 func ExecCommandOutput(command string, arg ...string) (string, error) { 12 out, err := exec.Command(command, arg...).Output() 13 if err != nil { 14 log.Println("callCommand failed!") 15 log.Println("") 16 log.Println(string(debug.Stack())) 17 return "", err 18 } 19 return String(out), nil 20 } 21 22 // ExecCommandOutputScanner 执行命令后一行一行的扫描输出结果. 23 func ExecCommandOutputScanner(command string, arg []string, lineScanner func([]byte) bool, splits ...bufio.SplitFunc) error { 24 cmd := exec.Command(command, arg...) 25 out, err := cmd.StdoutPipe() 26 if err != nil { 27 return err 28 } 29 if err := cmd.Start(); err != nil { 30 return err 31 } 32 bs := bufio.NewScanner(out) 33 for _, split := range splits { 34 bs.Split(split) 35 } 36 for bs.Scan() { 37 line := bs.Bytes() 38 if lineScanner(line) == false { 39 break 40 } 41 } 42 return bs.Err() 43 }