【问题标题】:Transfer a JSON string between programs without saving a file在程序之间传输 JSON 字符串而不保存文件
【发布时间】:2018-06-07 13:33:03
【问题描述】:

假设我有两个 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 字符串的其他语言的程序)获取?因为printed 字符串似乎不太可能像这样传输。

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

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

【问题讨论】:

  • 我猜你说的是在两个不同的进程之间共享内存资源?否则这个问题没有多大意义(你可以共享一个全局变量,将它发送到一个函数或许多其他方法..)。
  • 他们应该如何被“转移”?第一个脚本在哪里运行,第二个脚本在哪里运行?
  • 还有iOS app和linux服务器上的进程如何通信???
  • 如果您不知道您的流程应该如何通信,那么您根本无法回答。
  • 在确定系统将通信的内容之前,您需要先确定系统将如何通信

标签: python json transfer


【解决方案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”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 2015-01-28
    • 2016-12-26
    • 2019-02-15
    • 2019-07-02
    • 1970-01-01
    • 2018-11-15
    • 2013-03-27
    相关资源
    最近更新 更多