到目前为止,我已经看到了一些不同的方法,您可以轻松地在go中执行shell命令并产生它的输出。
但是,在程序仍在运行时会输出大量命令,例如git clone ...
如果使用以下内容执行git clone http://some.repo.git
:
out, err := exec.Command("...").Output()
似乎没有任何输出,因为它显然在运行。或者至少在我的实验中似乎就是这种情况。是否有一种简单的方法或模式可以实现以显示正在运行的命令的实时输出?
答案 0 :(得分:4)
您可以将管道连接到命令的stdout
:
cmd := exec.Command("...")
pipe, err := cmd.StdoutPipe()
然后启动命令:
err := cmd.Start()
并阅读其输出(定期经常):
b := make([]byte, 1024, 1024)
n, err := pipe.Read(b)
// b contains up to 1024 characters of cmd's output
最后,使用排水管道(管道中没有输出),调用Wait
等待命令退出:
err := cmd.Wait()