dshgdhdfcas30210
2015-03-11 22:57
浏览 133
已采纳

exec.command设置输出流未获取所有数据

This works

res = exec.Command(gitCmd, cmdArgs...)
res.Stdout, res.Stderr = os.Stdout,os.Stderr

When executing a git command like git clone .. you get full syntax response like

remote: Counting objects: 15, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 15 (delta 4), reused 0 (delta 0)
Receiving objects: 100% (15/15), done.
Resolving deltas: 100% (4/4), done.

BUT if you wrap it in a multiwriter like this

res = exec.Command(gitCmd, cmdArgs...)
res.Stdout, res.Stderr = io.MultiWriter(os.Stdout),io.MultiWriter(os.Stderr)

You lose all the resolving / receiving outputs, that you normally see. Why ?

The following works but to me seems unnecessary, IMHO the io.MultiWriter should do the same ...

res = exec.Command(gitCmd, cmdArgs...)
res.Stdout, res.Stderr = os.Stdout,os.Stderr
stdout, stderr = new(bytes.Buffer), new(bytes.Buffer)
go io.Copy(os.Stdout,stdout)
go io.Copy(os.Stderr,stderr)

图片转代码服务由CSDN问答提供 功能建议

这有效

  res = exec.Command(gitCmd,  cmdArgs ...)
res.Stdout,res.Stderr = os.Stdout,os.Stderr 
   
 
 

在执行git命令如 git clone时。 。您将获得完整的语法响应,例如

 远程:计数对象:15,完成。
远程:压缩对象:100%(10/10),完成。  
远程:总计15(增量4),已重用0(增量0)
接收对象:100%(15/15),已完成。
解决增量:100%(4/4),已完成。
    
 
 

但是,如果将其包装在这样的多层写入器中

  res = exec.Command(gitCmd,cmdArgs ...)
res  .stdout,res.Stderr = io.MultiWriter(os.Stdout),io.MultiWriter(os.Stderr)
   
 
 

您丢失了所有解析/接收输出, 您通常会看到的。 为什么?

以下操作有效,但对我来说似乎是不必要的,恕我直言,io.MultiWriter应该执行相同的操作...

  res  = exec.Command(gitCmd,cmdArgs ...)
res.Stdout,res.Stderr = os.Stdout,os.Stderr 
stdout,stderr = new(bytes.Buffer),new(bytes.Buffer)
go io。 复制(os.Stdout,stdout)
go io.Copy(os.Stderr,stderr)
   
 
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题