【问题标题】:Communicating from python script to already running script从 python 脚本通信到已经运行的脚本
【发布时间】:2019-12-12 21:21:08
【问题描述】:

我在 2 个 Python 脚本之间进行通信时遇到了一些问题。 我对 python 和树莓派还很陌生,我已经发现了 多种方法,经过一段时间了解方法转向 出来对我没用。所以花了几个小时后,我认为它会 最好问更有经验的人。

所以我正在做一个项目,我正在使用网页通过多个 Raspberry Pi 控制多台机器。 (每个覆盆子 4 个) 您可以在网页上输入机器以及应该激活机器的时间。 然后,该网页使用机器执行 Python 脚本,并将运行时间作为 raspberry pi 的参数,并在指定的时间内激活机器。 到目前为止,一切都很好。

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

所以在屏幕上显示每件事的脚本是一个无限循环,每 10 秒更改一次,但我不知道我应该如何正确地将新的运行时间放入正在运行的 python 脚本中。

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

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

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

感谢我能得到的每一个帮助和建议。

猕猴桃

【问题讨论】:

  • 您可以使用数据库(SQLite 是一个简单的基于文件的实用程序,至少使用 Perl,您可以将数据库放入内存中)。您也可以使用共享内存。最简单的形式是保留基于文件的事务,但不是写入磁盘,而是将其写入基于内存的/dev/shm(在这种情况下我会使用 JSON 文件,因为您可以导出Python 数据结构转为 JSON,然后将 JSON 重新导入回一个数据结构)。就个人而言,我会选择数据库。请注意,共享内存在重新启动时会被清除。

标签: python raspberry-pi


【解决方案1】:

您可以使用数据库(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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2019-12-31
    • 1970-01-01
    相关资源
    最近更新 更多