假设我有两个Python模块,first.py
和second.py
。 first.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_str
从first.py
转移到second.py
?有没有办法让material_str
以某种方式缓存在内存中然后由second.py
(或者更一般地,由其他语言中可以加载JSON字符串的程序)进行处理?因为print
ed字符串似乎不太可能像这样传输。
我知道我可以json.dump
将字典first.py
放入json.load
中的文件,second.py
放入first.py
。但是,这些代码每天会执行数千次,而JSON字符串仅在执行期间有用,所以我不想保存它们。结合second.py
和first.py
是不可行的,因为事实上它们是由不同的人开发的两个大项目。实际上,将second.py
视为执行OCR的脚本,将sys.stdout
视为一个iOS应用的脚本。现在需要将OCR的结果传输到app脚本,以便可以显示它们。
我已经阅读了一些关于{{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”。