go - 执行命令时如何使用文件作为标准输入

标签 go

我有这个非常简单的代码:

cmd := exec.Command("cat")
cmd.Stdout = os.Stdout
stdin, _ := cmd.StdinPipe()
file, _ := os.Open("file")
io.Copy(stdin, file)
_ = cmd.Run()

它有效。但问题是cmd.Run()永远不会回来。看来将文件写入标准输入后,cat仍在等待更多内容。

我正在尝试做什么 cat <file确实如此,在这种情况下cat读取文件后将退出。

我想知道如何在 go 中实现这一点?

最佳答案

这是因为你没有关闭标准输入。在 io.Copy 之后添加 stdin.Close()cat 随后将终止。

另外,我知道这只是一个示例,但绝对没有错误检查。我认为这只是为了说明目的。 :-)

关于go - 执行命令时如何使用文件作为标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45302931/

相关文章:

file - 为什么在Go中写入已删除的文件不会返回错误?

macos - 为较旧的 Mac OS 版本构建 golang 应用程序的正确方法是什么?

arrays - MongoDB slice 查询到golang

go - 使用 Gmail API quickstart 多次授权

dictionary - 将数组类型的映射键转换为2D slice

go - map 类型是引用类型。 var m map[string]int 不指向初始化的映射。这是什么意思?

api - 如何将数据从 Controller 传递到 go lang 中的表单?

struct - binary.Read 没有按预期处理结构填充

go - 性能几乎以线性方式提高,将GOMAXPROCS从1增加到4,但此后保持平稳

Git2Go 获取或硬 pull