golang父进程通过管道向子进程传递数据

这里例子里面父进程launch一个子进程,然后通过管道(stdin)向子进程传递文本串。

父进程:

package main

import (
    "log"
    "os/exec"
)

func main() {

    cmd := exec.Command("./subprocess")
    cmdIn, _ := cmd.StdinPipe()

    cmdIn.Write([]byte("hello subprocess\ngoodbye subprocess"))
    cmdIn.Close()

    var err error = cmd.Run();
    if err != nil {
        log.Fatal(err)
    }
}

子进程:

$ cat subprocess.go 
package main

import (
    "io/ioutil"
    "os"
    "time"
)

func main() {

    data, err := ioutil.ReadAll(os.Stdin)
    if err != nil {
        ioutil.WriteFile("subprocess.out", []byte(err.Error()), 0644)

    } else {
        ioutil.WriteFile("subprocess.out", data, 0644)
    }

    time.Sleep(time.Duration(1) * time.Second)
}