我如何让父函数每次在其子进程中获取数据时执行某项操作?

时间:2018-12-04 13:50:27

标签: python python-3.x subprocess

因此,假设我有两个脚本:一个是xml-sax读取器,另一个应该处理解析过程的结果。

我的解析器“操场”模型如下:

import json

def generator():
    n=0
    while n < 100:
        data_package = {n:"test", 101:"some more info"}
        temp = json.dumps(data_package)
        print(temp)
        n = n + 1

generator()

它模拟解析器生成的字典,将它们打包到一个json转储字符串中,以发送到其父函数。

此父函数将xml阅读器作为子进程生成,应采用dict并进一步处理信息。操场上的例子:

import subprocess

child = subprocess.Popen(args=["python3", "playground-parser.py"], stdout=subprocess.PIPE,
                        stdin=subprocess.PIPE, stderr=subprocess.STDOUT)

我现在所缺少的是,解析器告诉父级“嘿,我已经完成另一个data_package,我在等待您的处理,”是一种方式,父级会收到此消息,进行处理并丢弃data_package并向孩子发送一条消息,告诉孩子可以继续发送另一条data_package

通过阅读关于stackoverflow的其他子流程问题,我得出的结论是:

  • 我需要将xml-parser脚本的标准输出放入管道中,以便父级在可用时立即获取它。
  • 我可以使用Popen.communicate()向孩子发送文字吗?我无法确定它实际传达的内容,因为它也被用来从父级(outs, errors = child.communicate())访问所收集的输出和子级的错误
  • 有一个Popen.send_signal(),文档只说“将信号发送给孩子”。并继续讨论发送退出或终止信号。

我无法拼凑如何从孩子与父母进行交流,并让它在接收来自孩子的信息时真正地监听并执行。

在此感谢您在正确方向上的帮助或指点!

0 个答案:

没有答案