python – 进行子进程通信
发布时间:2020-05-23 20:46:03 所属栏目:Python 来源:互联网
导读:GO:有没有办法与子进程( shell脚本/ python脚本)进行通信,它正在等待stdin上的输入? 例如python脚本(子进程) import syswhile True: sys.stdout.write(%sn%eval(sys.stdin.readline())) 在go程序中,我想创建这个python脚本的子进程,并在必要时重复地在其std
|
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" (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
