在 golang 中,有一个实例io.ReadWriteCloser
如何获取其表示(代理类型)作为实例*os.File
(例如,为 提供exec.Cmd.ExtraFiles
)
首先想到的是使用os.Pipe
方法。但这样的存根仍然是单向的(只读或只写)。
那么如何完全表示io.ReadWriteCloser
为*os.File
Eg
func something(stream io.ReadWriteCloser) {
cmd := exec.Command("comm")
var wrapped *os.File = wrappAsFile(stream) // How this could be achieved?
cmd.ExtraFiles := []*File{wrapped}
}
我可以看到的简化解决方案如下所示。尽管如此(正如我之前提到的)它仅涵盖 Reader 流程。
func something(stream io.ReadWriteCloser) {
cmd := exec.Command("comm")
r, w, _ := os.Pipe()
go func() {
io.Copy(w, stream)
w.Close()
}()
cmd.ExtraFiles := []*File{r}
}
谢谢