在程序之间传输JSON字符串而不保存文件

时间:2018-06-07 13:33:03

标签: python json transfer

假设我有两个Python模块,first.pysecond.pyfirst.py生成一个JSON字符串; second.py接受JSON字符串并执行后续处理。为简化它们,请考虑以下示例:

# first.py
import json
fruit = input("Name a fruit: ")
material_str = json.dumps({"fruit": fruit})
print(material_str)

# second.py
import json
material = json.loads(material_str)
def blender(material):
    serving = material["fruit"] + " juice"
    return serving
print(blender(material))

现在我的问题是:如何将material_strfirst.py转移到second.py?有没有办法让material_str以某种方式缓存在内存中然后由second.py(或者更一般地,由其他语言中可以加载JSON字符串的程序)进行处理?因为print ed字符串似乎不太可能像这样传输。

我知道我可以json.dump将字典first.py放入json.load中的文件,second.py放入first.py。但是,这些代码每天会执行数千次,而JSON字符串仅在执行期间有用,所以我不想保存它们。结合second.pyfirst.py是不可行的,因为事实上它们是由不同的人开发的两个大项目。实际上,将second.py视为执行OCR的脚本,将sys.stdout视为一个iOS应用的脚本。现在需要将OCR的结果传输到app脚本,以便可以显示它们。

我已经阅读了一些关于{{1}}的文档,但看起来没有运气。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这个问题在Python中是完全可以解决的。就我而言,我唯一需要的是测试JSON字符串是否可以在不保存文件的情况下跨程序传输,就像我在标题中指出的那样。

我需要在second.py中使用subprocess模块来执行子进程中的first.py,然后将结果通过管道传递给后续过程。

import json
import subprocess
import re
# Get stdout from first.py
raw_result = subprocess.run(["python", "first.py"], stdout=subprocess.PIPE)
# Capture the JSON string
material_str = re.search(r".+({.+})", str(raw_result.stdout)).group(1)
# Load the JSON string as a dictionary
material = json.loads(material_str)
# Make juice
def blender(material):
    serving = material["fruit"] + " juice"
    return serving
print(blender(material))

通过执行python second.py并输入“Apple”,它会完美地返回“Apple juice”。