核心引擎允许插件在类似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状态的浏览器应用程序提供服务。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX SwingWorker等价物?   java如何检查一个字符串只包含数字和一个小数点?   java遇到了异常组织。阿帕奇。卡塔琳娜。LifecycleException:无法启动组件   java如何从日期格式获取最低计时单位?   java应用服务器与开发过程的集成   java我无法运行Junit测试   无法在java多线程处理中维护生产者任务的顺序   java如何在CLI应用程序中“拦截”Ctrl+C?   java如何使用JSch进行原子SFTP文件传输,以便在写入过程完成之前无法访问该文件?   java当用户摆弄html范围滑块时,如何更改内容(文本)?   如何在Java中向现有文件追加文本?   JUnit测试中的java模拟Apache驼峰位置   java Maven更新项目和依赖项