核心引擎允许插件在类似JSONlike的状态树上运行
pykzee的Python项目详细描述
Pykzee是一个允许插件在类似JSON的状态树上操作的引擎。 每个插件都可以将其内部状态作为全局状态树的一部分发布, 并且可以订阅树的任何部分的更改。插件也可以发送 彼此之间的命令。在
Pykzee最初的目的是建立家庭自动化系统,但是 在其他情况下也很有用。在
安装
$ pip install pykzee
Pykzee依赖于pyimmutable,如果不存在,pip将自动安装它。PyimTrable的安装可能需要主机系统上的C++ 17编译器。在
示例使用
^{pr2}$pykzee可执行文件将永远运行。因为它是在空目录中运行的,所以内部状态是空的({}),而且由于没有加载任何插件,所以状态永远不会发生变化。按CTRL-C停止pykzee进程。那么试试这个:
echo '{"__plugin__": "core-plugin"}' >core.json
mkdir plugins
echo '{"__plugin__": "pykzee.core.StateLoggerPlugin", "pretty": true}' >plugins/StateLogger.json
pykzee
{$tt1现在再次启动输出。您看到的是StateLoggerPlugin打印了完整的状态树。每次状态发生变化时,它都会再次执行此操作。在
Pykzee在原始状态树中找到一个带有__plugin__键的对象时,都会实例化一个插件。__plugin__键的值必须是Python类(以点符号表示,如foo.bar.baz.classname,指模块foo.bar.baz中的类classname)或特殊值core-plugin。包含__plugin__键的对象将在状态树中替换为插件发布的状态。原始对象可能有__plugin__以外的键,这些键可用于配置插件,请参见本例中的pretty键,该键使StateLoggerPlugin以打印格式输出状态。在
当pykzee进程在终端中仍处于活动状态时,打开另一个终端窗口,输入相同的pykzee-config目录并添加另一个文件:
echo '{"hello": "world"}' >test.json
pykzee进程将注意到配置文件目录中的更改,并重新加载配置。回到第一个终端窗口,您将看到StateLoggerPlugin打印了新的状态树,它现在包含一个名为test的字段,其内容为{"hello": "world"}。在
与核心包一起分发的插件
pykzee包附带三个插件:
- core-plugin:发布关于Pykzee引擎本身的信息,例如加载了哪些插件。在
- pykzee.core.StateLoggerPlugin:记录每次更改的完整状态树。在
- pykzee.core.CodePlugin:通过访问状态树来执行Python代码片段。在
进一步阅读
Pykzee只有在安装了更多插件之后才有用。请看一下pykzee-inspector插件,它包含一个web服务器,该服务器为用于检查Pykzee状态的浏览器应用程序提供服务。在
- 项目
标签: