exec.Command管道实现循环输入

转载自:hipeace86
目前有一个程序需要启用另外一个code.exe程序来做转码处理 此程序运行后是一个死循环的,就等待输入按回车后就返回相应的解码数据

现在用exec.Command启动程序后就只能使用管道输入一次,代码如下

cmd := exec.Command("./code.exe")
var pipIn,pipOut bytes.Buffer
cmd.Stdin = &pipIn
cmd.Stdout = &pipOut

cmd.Run()
pipIn.WriteString(fmt.Sprintf("%s\n", "35063812556aa2cdd6d1cbd"))

time.Sleep(time.Millisecond * 500)
fmt.Println(strings.Replace(pipOut.String(), "\n", "", 1))
pipIn.WriteString(fmt.Sprintf("%s\n", "350632125e6aa2cdded1c"))
time.Sleep(time.Millisecond * 500)
fmt.Println(strings.Replace(pipOut.String(), "\n", "", 1))

并不能得到第二次输入的数据解码后的结果 可有其它方法实现长时运行code.exe程序,可以循环输入并得到输出结果的方法? 类似于python的spawn 新手对标准库还不熟悉,还请各大神指教!

解决方案:

 1 DecodeCmd = exec.Command("code.exe")
  2 pipIn, _ := rabbit.DecodeCmd.StdinPipe()
  3 pipOut, _ := rabbit.DecodeCmd.StdoutPipe()
  4 DecodeCmd.Start()
  5 CmdBufReader = bufio.NewReader(pipOut)
  6 CmdBufWriter = bufio.NewWriter(pipIn)
  7
  8 CmdBufWriter.WriteString(fmt.Sprintf("%s\n", "35063812556aa2cdd6d1cbd"))
  9 CmdBufWriter.Flush()
 10 code, _, _ := r.CmdBufReader.ReadLine()
 11 CmdBufWriter.WriteString(fmt.Sprintf("%s\n", "350632125e6aa2cdded1c"))
 12 CmdBufWriter.Flush()
 13 code, _, _ = r.CmdBufReader.ReadLine()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容