duanming7961 2014-06-18 10:04
浏览 436
已采纳

在Go中执行命令时,如何获得命令运行时的输出?

So far I've seen a few different ways whereby you can easily execute a shell command in go and yield it's output. However, there are a ton of commands that output while the program is still running, for example, git clone ...

If git clone http://some.repo.git is executed using something like:

out, err := exec.Command("...").Output()

There doesn't seem to be any output as it's running obviously. Or at least in my experiance that seems to be the case. Is there a simple way or pattern that can be implemented to show the live output of the command that is being ran?

  • 写回答

1条回答 默认 最新

  • duangu6431 2014-06-18 10:17
    关注

    You can get a pipe connected to the command's stdout:

    cmd := exec.Command("...")
    
    pipe, err := cmd.StdoutPipe()
    

    Then start the command:

    err := cmd.Start()
    

    and read its output (periodically ever so often):

    b := make([]byte, 1024, 1024)
    
    n, err := pipe.Read(b)
    
    // b contains up to 1024 characters of cmd's output
    

    in the end, and with a drained pipe (no output left in the pipe), call Wait to wait for the command to exit:

    err := cmd.Wait()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向