概述
例如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")
注意:检查所有错误,修复-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"
总结
以上是编程之家为你收集整理的python – 进行子进程通信全部内容,希望文章能够帮你解决python – 进行子进程通信所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧