在Golang中捕获并重印命令的终端输出实例

390 阅读1分钟

如果你想在命令进行过程中捕捉终端输出,你可以使用下面的例子。它将运行给定的命令,捕获原始输出并逐行重印。如果你愿意,你可以在打印前对该行进行处理。

例子

package main

import (
	"bufio"
	"fmt"
	"io"
	"log"
	"os/exec"
)

func main() {
	cmd := exec.Command("gotest", "-v", "./...")

	stdout, err := cmd.StdoutPipe()
	if err != nil {
		log.Fatal(err)
	}

	err = cmd.Start()
	if err != nil {
		log.Fatal(err)
	}

	buffer := bufio.NewReader(stdout)

	for {
		line, _, err := buffer.ReadLine()

		fmt.Println(string(line))

		if err == io.EOF {
			break
		}
	}
}