在 Go 版本 1.14.2 中,以下是一些示例代码,它说明了生成命令、通过标准输入向其提供数据、然后捕获其标准输出和标准错误的常用方法。它使用管道,但是如果 stdout 或 stderr 管道的缓冲区在进程完成之前已满,这可能会导致程序阻塞(此示例中省略了错误处理)...
func ExecExample(cmd *exec.Cmd, input *[]byte) {
stdout, err := cmd.StdoutPipe()
stderr, err := cmd.StderrPipe()
stdin, err := cmd.StdinPipe()
err = cmd.Start()
stdin.Write(*input)
stdin.Close()
stdoutBytes, err := ioutil.ReadAll(stdout)
stderrBytes, err := ioutil.ReadAll(stderr)
waitErr := cmd.Wait()
}
如何在 Go 中重构这个示例代码,以便 stdout 和 stderr 管道永远不会阻塞?
另外,请注意,我正在寻找一种方法来分别捕获 stdout 和 stderr 输出。我不希望它们结合在一起。
先感谢您。
跃然一笑
Cats萌萌
慕妹3242003
随时随地看视频慕课网APP
相关分类