您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 进行子进程通信

5b51 2022/1/14 8:20:16 python 字数 2939 阅读 474 来源 www.jb51.cc/python

GO:有没有办法与子进程( shell脚本/ python脚本)进行通信,它正在等待stdin上的输入? 例如python脚本(子进程) import sys while True: sys.stdout.write('%s\n'%eval(sys.stdin.readline())) 在go程序中,我想创建这个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")

注意:检查所有错误,修复-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 – 进行子进程通信所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶