猿问

写入 exec.Cmd.StdinPipe() 没有任何作用

我正在使用 exec 创建一个新命令,获取标准输入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)= 爪哇

flag.Args()[1:]...= 传递给 java 程序的参数数组

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


浮云间
浏览 248回答 1
1回答

慕哥6287543

您缺少换行符。当您使用 Scanln 读取字符串时,生成的字符串末尾没有换行符: written, err := fmt.Fprintln(cmdInWriter, c)
随时随地看视频慕课网APP

相关分类

Go
我要回答