如何在golang中管道stdin?

时间:2017-11-29 20:53:59

标签: go

我在golang中将管道连接到我的stdout,如下所示,以便进行测试(我删除了错误处理代码):

stdout := os.Stdout
defer func() {
  os.Stdout = stdout
}()

r, w, _ = os.Pipe()
os.Stdout = w

var buf bytes.Buffer
fmt.Print(testOut)
w.Close()
io.Copy(&buf, r)
assert.Equal(t, testOut, buf.String())

我基本上也希望与stdin做类似的事情。像这样:

stdin := os.Stdin
defer func() {
  os.Stdin = stdin
}()

r, w, _ = os.Pipe()
os.Stdin = r

var in string
w.WriteString(testIn)
// w.Close()
fmt.Scan(&in)
assert.Equal(t, testIn, in)

但是,我不能让这个工作。如果我不关闭wfmt.Scan(&in)永远不会返回。如果我关闭w,我会收到file already closed错误。

任何我想知道如何使这个工作?

0 个答案:

没有答案