登录
首页 >  Golang >  Go问答

调用 exec.Cmd.StdinPipe() 不会产生任何效果

来源:stackoverflow

时间:2024-02-29 12:45:21 448浏览 收藏

今天golang学习网给大家带来了《调用 exec.Cmd.StdinPipe() 不会产生任何效果》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我正在使用 exec 创建一个新命令,获取 stdin io.writecloser 并按如下方式写入:

cmd := exec.Command(flag.Arg(0), flag.Args()[1:]...)
cmdInWriter, err := cmd.StdinPipe()

err = cmd.Start()

go func() {
    for {
        var c string
        _, err = fmt.Scanln(&c)
        written, err := io.WriteString(cmdInWriter, c)
        fmt.Println(written) // prints 4, if c is "help"
    }
}()

但是,这似乎并没有真正写入程序。

  • flag.arg(0) = java
  • flag.args()[1:]... = 传递给 java 程序的参数数组

我用我快速制作的另一个程序对其进行了测试(之前的列表不适用于此处),并且该字符串再次未被写入。我做错了什么?


解决方案


您缺少换行符。当您使用 scanln 读取字符串时,生成的字符串末尾没有换行符:

written, err := fmt.Fprintln(cmdInWriter, c)

终于介绍完啦!小伙伴们,这篇关于《调用 exec.Cmd.StdinPipe() 不会产生任何效果》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>