执行命令时,保证实时得到执行的日志,可以以通过下面的代码 实现。亲测试可以使用
package utils
import (
"fmt"
"log"
"os/exec"
)
func RunCommand(name string, arg ...string) error {
cmd := exec.Command(name, arg...)
log.Println(cmd.String())
// 命令的错误输出和标准输出都连接到同一个管道
stdout, err := cmd.StdoutPipe()
cmd.Stderr = cmd.Stdout
if err != nil {
return err
}
if err = cmd.Start(); err != nil {
return err
}
// 从管道中实时获取输出并打印到终端
for {
tmp := make([]byte, 1024)
_, err := stdout.Read(tmp)
fmt.Print(string(tmp))
if err != nil {
break
}
}
if err = cmd.Wait(); err != nil {
return err
}
return nil
}