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)
}