46 lines
686 B
Go
46 lines
686 B
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os/exec"
|
||
|
)
|
||
|
|
||
|
func RunCommandWithStdoutPipe(workdir, progName string, args ...string) error {
|
||
|
cmd := exec.Command(progName, args...)
|
||
|
cmd.Dir = workdir
|
||
|
out, err := cmd.StdoutPipe()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
scanner := bufio.NewScanner(out)
|
||
|
go func() {
|
||
|
counter := 0
|
||
|
for scanner.Scan() {
|
||
|
if counter > 10 {
|
||
|
// Swallow the output
|
||
|
if counter%50 == 0 {
|
||
|
fmt.Printf("output %d lines in total.\n", counter)
|
||
|
}
|
||
|
counter++
|
||
|
continue
|
||
|
}
|
||
|
PrintOutput("", scanner.Bytes())
|
||
|
counter++
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
err = cmd.Start()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
err = cmd.Wait()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|