From: qydysky Date: Mon, 3 Aug 2020 06:47:23 +0000 (+0800) Subject: 31 X-Git-Tag: v0.0.2~57 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=5a6fcd7327b244f9d22925bae2befba53059a369;p=part%2F.git 31 --- diff --git a/Exec.go b/Exec.go index 7ce2865..0e0199f 100644 --- a/Exec.go +++ b/Exec.go @@ -1,111 +1,26 @@ package part import ( - "os" - "bufio" - // "fmt" Ppart "github.com/qydysky/part/linuxwin" - "io" "os/exec" - "errors" - "strings" ) -func Log (cmd *exec.Cmd,filename string) error { - var newpath func(string) error = func (filename string)error{ - /* - 如果filename路径不存在,就新建它 - */ - var exist func(string) bool = func (s string) bool { - _, err := os.Stat(s) - return err == nil || os.IsExist(err) - } - - for i:=0;true;{ - a := strings.Index(filename[i:],"/") - if a == -1 {break} - if a == 0 {a = 1}//bug fix 当绝对路径时开头的/导致问题 - i=i+a+1 - if !exist(filename[:i-1]) { - err := os.Mkdir(filename[:i-1], os.ModePerm) - if err != nil {return err} - } - } - - if _, err := os.Stat(filename); os.IsNotExist(err) { - fd,err:=os.Create(filename) - if err != nil { - return err - }else{ - fd.Close() - } - } - return nil - } - if err:=newpath(filename);err != nil {return err} +type lexec struct {} - fd, err := os.OpenFile(filename, os.O_RDWR | os.O_EXCL, 0755) - if err != nil {return err} - - wb := bufio.NewWriter(fd) - - var w func(string) = func(s string) { - _, err2 := wb.WriteString(s+"\n") - if err2 != nil { - Logf().E(err2.Error()) - } - } - defer func(){ - w("Log stop!") - wb.Flush() - fd.Sync() - fd.Close() - }() - - w("Log start!") - var s string - for _,v:= range cmd.Args { - s+=v+" "; - } - w("cmd: "+s) - - stdout, err := cmd.StdoutPipe() - - if err != nil { - w(err.Error()) - return errors.New(err.Error()) - } - - Startf(cmd) - - reader := bufio.NewReader(stdout) - - for { - line, err2 := reader.ReadString('\n') - if err2 != nil || io.EOF == err2 { - break - } - w(line) - } - - if err:=cmd.Wait();err !=nil{return err} - return nil +func Exec() *lexec{ + return &lexec{} } -func Run(hide bool,prog string,cmd ...string){ +func (this *lexec) Run(hide bool,prog string,cmd ...string){ Ppart.PRun(hide,prog,cmd ...) } -func Startf(pro ...*exec.Cmd){ +func (this *lexec) Startf(pro ...*exec.Cmd){ Ppart.PStartf(pro) } -func Stop(pro ...*exec.Cmd){ +func (this *lexec) Stop(pro ...*exec.Cmd){ for i := range pro { pro[i].Process.Kill() } -} - -func Cmd () { - } \ No newline at end of file