从python脚本与已运行的脚本进行通信

时间:2019-12-12 21:21:08

标签: python raspberry-pi

我在2个Python脚本之间进行通讯时遇到一些问题。 我是python和raspberry pi的新手,我已经找到了 多种方法经过一段时间后才了解该方法 对我毫无用处。所以花了几个小时之后,我想 最好去问更多有经验的人。

因此,我正在一个项目中,我正在使用一个网页通过多个Raspberry Pi控制多个机器。 (每个树莓4个) 您可以在网页上输入机器以及应该激活机器多长时间。 然后,该网页将使用机器和运行时间作为树莓派的参数运行Python脚本,并在指定的时间内激活机器。 到目前为止,一切都很好。

我还为每个Raspberry Pi配备了一个小的2行LCD显示屏。 该屏幕应该每10秒钟左右更改一次,并显示树莓派上的每台计算机以及该计算机仍在运行的时间,然后切换到下一台计算机。

因此,在屏幕上显示所有内容的脚本是一个无限循环,每10秒更改一次,但是我不知道如何将新的运行时间正确地输入到正在运行的python脚本中。

我使用python脚本中已经存在的值来激活机器,所以我认为我可以以某种方式将信息从该脚本发送到无尽的,已经在运行的LCD脚本。

但是我发现的大多数方法是停止并等待其他脚本发出的信号。但随后它不会每10秒更改一次。

我现在知道的唯一方法是保存到文件并在另一个脚本xD中读取文件,但这不是很好。

我非常感谢您的每一次帮助,并建议我可以得到。

猕猴桃

1 个答案:

答案 0 :(得分:0)

您可以使用数据库(SQLite是一个基于文件的简单数据库系统,至少使用Perl,您可以将数据库直接放入内存中。)

另一种方法是使用共享内存,无论是通过模块还是文件系统本身。

下面是一个示例,其中一个Python脚本将数据结构写入JSON文件至/dev/shm共享内存空间,另一个脚本将JSON作为已写数据结构读回:

输出脚本:

import json

file = "/dev/shm/data.json"

data = {
    "pi1_enabled": True,
    "pi1_run_mins": 30,
    "pi2_enabled": False,
    "pi2_run_mins": 30
}

with open(file, "w") as jsonfile:
    json.dump(data, jsonfile)

输入脚本:

import json

file = "/dev/shm/data.json"

data = json.loads(open(file).read())

print(data)

输入脚本的输出:

{'pi1_run_mins': 30, 'pi1_enabled': True, 'pi2_enabled': False, 'pi2_run_mins': 30}