Strange golang exec.Cmd issue,

Hi,
its a copy of stackoverflow question - http://stackoverflow.com/questions/33796826/strange-behaviour-of-golang-exec-command-program , I hope we could discuss this more deeply. Here it is:

I have such code:

func main() {
        s := "foobar"
        cmd := exec.Command("wc", "-l")
        stdin, err := cmd.StdinPipe()
        if err != nil {
                log.Panic(err)
        }
        stdout, err := cmd.StdoutPipe()
        if err != nil {
                log.Panic(err)
        }
        err = cmd.Start()
        if err != nil {
                log.Panic(err)
        }
        io.Copy(stdin, bytes.NewBufferString(s))
        stdin.Close()
        io.Copy(os.Stdout, stdout)
        err = cmd.Wait()
        if err != nil {
                log.Panic(err)
        }
}

and its output is:

0

But when I will do simple modification:

func main() {
        runWcFromStdinWorks("aaa\n")
        runWcFromStdinWorks("bbb\n")
}

func runWcFromStdinWorks(s string) {
        cmd := exec.Command("wc", "-l")
        stdin, err := cmd.StdinPipe()
        if err != nil {
                log.Panic(err)
        }
        stdout, err := cmd.StdoutPipe()
        if err != nil {
                log.Panic(err)
        }
        err = cmd.Start()
        if err != nil {
                log.Panic(err)
        }
        io.Copy(stdin, bytes.NewBufferString(s))
        stdin.Close()
        io.Copy(os.Stdout, stdout)
        err = cmd.Wait()
        if err != nil {
                log.Panic(err)
        }
}

It works, but why? Its just calling method, why first version is not working?
I would be happy if someone would be able to point me some useful places in sourcecode to understand root cause of this problem.

Thanks!

Ok, for new generations - I forgot ā€˜\nā€™ in other input ;ā€¦(

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.