轉(zhuǎn)載自:hipeace86
目前有一個(gè)程序需要啟用另外一個(gè)code.exe程序來(lái)做轉(zhuǎn)碼處理 此程序運(yùn)行后是一個(gè)死循環(huán)的怕膛,就等待輸入按回車后就返回相應(yīng)的解碼數(shù)據(jù)
現(xiàn)在用exec.Command啟動(dòng)程序后就只能使用管道輸入一次,代碼如下
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))
并不能得到第二次輸入的數(shù)據(jù)解碼后的結(jié)果 可有其它方法實(shí)現(xiàn)長(zhǎng)時(shí)運(yùn)行code.exe程序,可以循環(huán)輸入并得到輸出結(jié)果的方法匪凉? 類似于python的spawn 新手對(duì)標(biāo)準(zhǔn)庫(kù)還不熟悉,還請(qǐng)各大神指教蹬叭!
解決方案:
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()