xdd-plus/models/cmd.go
2021-08-21 20:27:59 +08:00

61 lines
1019 B
Go

package models
import (
"bufio"
"io"
"os/exec"
"time"
"github.com/beego/beego/v2/core/logs"
)
func cmd(str string, msgs ...interface{}) {
cmd := exec.Command("sh", "-c", str)
stdout, err := cmd.StdoutPipe()
stderr, err := cmd.StderrPipe()
if err != nil {
logs.Warn("cmd.StdoutPipe: ", err)
return
}
cmd.Dir = ExecPath + "/scripts/"
err = cmd.Start()
if err != nil {
logs.Warn("%v", err)
return
}
go func() {
msg := ""
reader := bufio.NewReader(stderr)
for {
line, err2 := reader.ReadString('\n')
if err2 != nil || io.EOF == err2 {
break
}
msg += line
}
if msg != "" {
sendMessagee(msg, msgs...)
}
}()
msg := ""
reader := bufio.NewReader(stdout)
st := time.Now()
for {
line, err2 := reader.ReadString('\n')
if err2 != nil || io.EOF == err2 {
break
}
msg += line
nt := time.Now()
if (nt.Unix() - st.Unix()) > 1 {
go sendMessagee(msg, msgs...)
st = nt
msg = ""
}
}
if msg != "" {
sendMessagee(msg, msgs...)
}
err = cmd.Wait()
}