我有两个脚本 parent.py 和 child.py parent.py 调用 child.py 作为子进程。Child.py 有一个在字典中收集某些结果的函数,我希望将该字典返回给父进程。我尝试通过将该字典从 child.py 打印到它的 STDOUT 上,以便父进程可以读取它,但这对我没有帮助,因为字典的内容正在被父进程作为单独的行中的字符串读取。
此外,正如评论中所建议的,我尝试使用 JSON 序列化字典,同时在标准输出上打印它,并使用 JSON 从父级读回它,这工作正常,但我也将许多其他信息从子级打印到其标准输出最终也被父母阅读并混淆了。
提出的另一个建议是将子级的结果写入目录中的一个文件,并让父级从该文件中读取。这也可以,但我会在 Celery 中运行 100 多个此代码的实例,因此它会导致子的其他实例覆盖同一个文件。
我的问题是,因为我们有一个连接两个进程的管道,我如何才能将我的字典直接从 child.py 写入管道并从 parent.py 读取
# parent.py
import subprocess
proc = subprocess.Popen(['python3', 'child.py'],
stdin=subprocess.PIPE,
stdout = subprocess.PIPE
)
proc.comunicate()
result = proc.stdout
#child.py
def child_function():
result = {}
result[1] = "one"
result[2] = "two"
print(result)
#return result
if __name__ == "__main__":
child_function()