GO:有没有办法与子进程(
shell脚本/
python脚本)进行通信,它正在等待stdin上的输入?
例如python脚本(子进程)
import sys while True: sys.stdout.write('%s\n'%eval(sys.stdin.readline()))
在go程序中,我想创建这个python脚本的子进程,并在必要时重复地在其stdin上提供输入,并获取其输出.在Go程序的stdout上写或从文件读/写也可以.
这大致是我正在尝试的,但没有任何反应 –
c := exec.Command("python","-u add.py") si,_ := c.StdinPipe() so,_ := c.StdoutPipe() c.Start() si.Write([]byte("2+2\n")
解决方法
这是你的代码的工作版本(python代码没有变化).
注意:检查所有错误,修复-u标志,使用bufio读取一行,并使用Wait等待进程结束.
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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。