package main
import (
"fmt"
"os/exec"
"sync"
)
func main() {
var wg sync.WaitGroup
var err error
path := "/home/keli/1_Workbench/1_Go/src/temp/main/1.out"
cmd := exec.Command(path) //生成一个指令
in, err := cmd.StdinPipe() // 生成一个指向子进程标准输入流的管道 注意这个时候子进程其实还没有产生
if err != nil {
panic(err)
}
out, err := cmd.StdoutPipe() //生成一个指向子进程的标准输出流的管道
if err != nil {
panic(err)
}
wg.Add(1)
go func() {
defer wg.Done()
cmd.Run()
}()
var inputs []string = []string{
"aaaa\n",
"bbbb\n",
"cccc\n",
}
for _, input := range inputs {
_, err = in.Write([]byte(input))//out和in是io.reader和io.writer,所以我们实际上是可以用一些封装的io函数来操纵他们的,这里我用了最简单的Write和Read
if err != nil {
panic(err)
}
outData := make([]byte, 128)
n, err := out.Read(outData)
if err != nil {
panic(err)
}
fmt.Println(string(outData[:n]))
}
wg.Wait()
}
golang(四)使用os/exec来操控程序
最新推荐文章于 2024-01-21 03:35:10 发布