GO:有没有办法与等待stdin输入的子进程(shell脚本/ python脚本)进行通信?
例如python脚本(子进程)
import sys
while True:
sys.stdout.write('%s\n'%eval(sys.stdin.readline()))在go程序中,我希望创建这个python脚本的子进程,并在必要和反复的情况下在stdin上提供它的输入,并获取它的输出。在Go程序的标准输出上写入或从文件中读取/写入也可以。
这大概是我想做的,但什么都没发生-
c := exec.Command("python", "-u add.py")
si,_ := c.StdinPipe()
so,_ := c.StdoutPipe()
c.Start()
si.Write([]byte("2+2\n")发布于 2014-03-27 11:00:58
下面是go代码的工作版本(python代码不变)。
注意:检查所有错误,固定-u标志,使用布菲奥读取一行,等等待进程结束。
import (
"bufio"
"fmt"
"log"
"os/exec"
)
func main() {
c := exec.Command("python", "-u", "add.py")
si, err := c.StdinPipe()
if err != nil {
log.Fatal(err)
}
so, err := c.StdoutPipe()
if err != nil {
log.Fatal(err)
}
reader := bufio.NewReader(so)
err = c.Start()
if err != nil {
log.Fatal(err)
}
// Now do some maths
for i := 0; i < 10; i++ {
sum := fmt.Sprintf("2+%d\n", i)
_, err = si.Write([]byte(sum))
if err != nil {
log.Fatal(err)
}
answer, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
fmt.Printf("Answer to %q is %q\n", sum, answer)
}
// Close the input and wait for exit
si.Close()
so.Close()
c.Wait()
}产
Answer to "2+0\n" is "2\n"
Answer to "2+1\n" is "3\n"
Answer to "2+2\n" is "4\n"
Answer to "2+3\n" is "5\n"
Answer to "2+4\n" is "6\n"
Answer to "2+5\n" is "7\n"
Answer to "2+6\n" is "8\n"
Answer to "2+7\n" is "9\n"
Answer to "2+8\n" is "10\n"
Answer to "2+9\n" is "11\n"https://stackoverflow.com/questions/22680080
复制相似问题