exec.Command 设置输出流未获取所有数据
exec.Command setting output stream not getting all data
这个有效
res = exec.Command(gitCmd, cmdArgs...)
res.Stdout, res.Stderr = os.Stdout,os.Stderr
当执行像 git clone ..
这样的 git 命令时,你会得到像
这样的完整语法响应
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.
但是如果你把它包装在像这样的多写入器中
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.Copy(os.Stdout,stdout)
go io.Copy(os.Stderr,stderr)
区别在于 TTY。使用 MultiWriter(或其他任何东西)会破坏 TTY。如果你想这样做,你需要使用 PTY master/slave 对。您可以查看 https://github.com/kr/pty 了解更多信息。
这个有效
res = exec.Command(gitCmd, cmdArgs...)
res.Stdout, res.Stderr = os.Stdout,os.Stderr
当执行像 git clone ..
这样的 git 命令时,你会得到像
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.
但是如果你把它包装在像这样的多写入器中
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.Copy(os.Stdout,stdout)
go io.Copy(os.Stderr,stderr)
区别在于 TTY。使用 MultiWriter(或其他任何东西)会破坏 TTY。如果你想这样做,你需要使用 PTY master/slave 对。您可以查看 https://github.com/kr/pty 了解更多信息。