python – 进行子进程通信
发布时间:2020-12-16 21:29:54 所属栏目:Python 来源:网络整理
导读:GO:有没有办法与子进程( shell脚本/ python脚本)进行通信,它正在等待stdin上的输入? 例如python脚本(子进程) import syswhile True: sys.stdout.write('%sn'%eval(sys.stdin.readline())) 在go程序中,我想创建这个python脚本的子进程,并在必要时重复地在
GO:有没有办法与子进程(
shell脚本/
python脚本)进行通信,它正在等待stdin上的输入?
例如python脚本(子进程) import sys while True: sys.stdout.write('%sn'%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+2n") 解决方法
这是你的代码的工作版本(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+%dn",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 %qn",sum,answer) } // Close the input and wait for exit si.Close() so.Close() c.Wait() } 哪个产生 Answer to "2+0n" is "2n" Answer to "2+1n" is "3n" Answer to "2+2n" is "4n" Answer to "2+3n" is "5n" Answer to "2+4n" is "6n" Answer to "2+5n" is "7n" Answer to "2+6n" is "8n" Answer to "2+7n" is "9n" Answer to "2+8n" is "10n" Answer to "2+9n" is "11n" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |