Package exec
import "os/exec"
package exec运行外部命令。它包装os.startprocess,以便重新映射stdin和stdout、将I/O与管道连接以及进行其他调整。
目录
1. 协程执行命令
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
}
2. 阻塞执行命令
func CmdBlockExec(name string, arg ...string) error {
cmd := exec.Command(name, arg...)
if err := cmd.Run(); err != nil {
return err
}
return nil
}
3. 实时输出命令
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
}
4. 阻塞输出命令
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
}