import "os/exec"
package exec运行外部命令。它包装os.startprocess,以便从新映射stdin和stdout、将I/O与管道链接以及进行其余调整。code
3. 实时输出命令cmd
4. 阻塞输出命令string
func CmdSyncExec(name string, arg ...string) error { cmd := exec.Command(name, arg...) if err := cmd.Start(); err != nil { return err } //wait for command to finishing ... if err := cmd.Wait(); err != nil { return err } return nil }
func CmdBlockExec(name string, arg ...string) error { cmd := exec.Command(name, arg...) if err := cmd.Run(); err != nil { return err } return nil }
func CmdSyncOutput(name string, arg ...string) error { cmd := exec.Command(name, arg...) stdout, err := cmd.StdoutPipe() if err != nil { return err } go func() { for { buf := make([]byte, 1024) if length, err := stdout.Read(buf); err != nil { break } else if err == nil && length > 0 { buf[length-1] = 0 fmt.Printf("%s", buf) } } }() if err := cmd.Run(); err != nil { return err } return nil }
func CmdBlockOutput(name string, arg ...string) error { out, err := exec.Command(name, arg...).out if err != nil { return err } fmt.Printf("%s", out) return nil }