python实现规则引擎_python – 如何在不使用eval()或exec()的情况下创建规则引擎?...
我的数据库中有一个简单的规则/条件表,用于为我们的某个系统生成警报.我想创建规则引擎或特定于域的语言.
存储在此表中的简单规则是..(省略此处的关系)
if temp > 40 send email
请注意,会有更多这样的规则.脚本每天运行一次以评估这些规则并执行必要的操作.一开始,只有一条规则,所以我们有脚本只支持该规则.但是,我们现在需要使其更具可扩展性,以支持不同的条件/规则.我已经研究过规则引擎,但我希望以一种简单的pythonic方式实现这一点.目前,我只提出了eval / exec,我知道这不是最推荐的方法.那么,实现这个目标的最佳方法是什么?
(规则作为数据存储在数据库中,因此每个对象如“温度”,条件如“> / = ..等”,值类似“40,50..etc”和动作如“电子邮件,短信等等. “存储在数据库中,我检索它以形成条件…如果temp> 50发送电子邮件,那是我的想法然后使用exec或eval对它们进行实时代码..但不确定这是否是正确的方法)
解决方法:
好吧,如果你想做的是发送电子邮件,那么使用email module.
如果我是你,我会编写一个简单的Python脚本来处理一堆规则,可能只是在一个单独的文件中编写为简单的Python语句,然后发送电子邮件/短信/ …用于需要操作的那些规则执行.
您可以使用cron等服务每天运行一次(或其他任何操作)
例如,如果您的规则如下所示:
# Rule file: rules.py
def rule1():
if db.getAllUsers().contains("admin"):
return ('email', 'no admin user in db')
else:
return None, None
def rule2():
if temp > 100.0:
return ('sms', 'too hot in greenhouse')
else:
return (None, None)
...
rules = [rule1, rule2, ....]
那么你的处理脚本可能如下所示:
# Script file: engine.py
import rules
import email
...
def send_email(message, receiver):
# function that sends an email...
def send_sms(message, receiver):
# function that sends an sms...
actions = {'email':send_email, 'sms':send_sms, ...}
if __name__ == '__main__':
# Declare receiver here...
for rule in rules.rules:
# Does the rule return a do-able action?
# To be really paranoid we might wrap this in a try/finally
# in case the rules themselves have any side effects,
# or they don't all return 2-tuples.
act, message = rule()
if act in actions:
# perform the action
actions[rule()](message, receiver)
毫无疑问,还有其他方法可以做到这一点,例如创建用于编写规则的Pythonic DSL.
标签:python,dictionary,eval,exec
来源: https://codeday.me/bug/20190902/1791968.html
python实现规则引擎_python – 如何在不使用eval()或exec()的情况下创建规则引擎?...相关推荐
- python文本文件读取失败_Python 读取文本文件编码错误解决方案(未知文本文件编码情况下解决方案)...
很多情况下我们是这样读取文本文件的: with open(r'F:\.Python Project\spidertest1\test\pdd凉席.txt', 'r') as f: text = f.r ...
- python设计一个节假日字典_python实现在无须过多援引的情况下创建字典的方法
本文实例讲述了python实现在无须过多援引的情况下创建字典的方法.分享给大家供大家参考.具体实现方法如下: 1.使用itertools模块 import itertools the_key = [' ...
- python定位文件位置_python使用相对定位,绝对定位,选取同级别文件下的指定文件(csv,excel)...
最近使用python读取同级下的data数据文件,开始找了很多方法.下面我总结成二种方法: 1.xxx.py想要打开.data.csv,使用相对路径,有如下方法: 思路: xxx.py想要打开的是mp ...
- python读取文件编码错误_Python 读取文本文件编码错误解决方案(未知文本文件编码情况下解决方案)...
很多情况下我们是这样读取文本文件的: with open(r'F:\.Python Project\spidertest1\test\pdd凉席.txt', 'r') as f: text = f.r ...
- python keyerror5种方法_Python Scrapy-----KeyError: Spider not found 5种出错的情况
KeyError: 'Spider not found:name一样,为何还是找不到spider 呢. 往下看看,总有一个是你要的答案. 第一种(最简单的错误): 运行的爬虫名字与爬虫文件中的name ...
- python高级数据分析师_python分析各大城市对数据分析师的招聘情况
分析目的: 1.分析招聘对于学历的要求 2.分析招聘对于工作经验的要求 3.分析各城市对数据分析师的岗位需求 4.分析数据分析师的发展方向 5.分析数据分析师在全国的薪资情况
- python判断当前激活窗口_多种窗口都可能被激活的情况下判断其中某个是否激活...
遇到的问题 今天测试 SAP 系统流程的时候突然出现了问题导致无法继续,问题是这样的:在 SAP 查询出结果后需要点击导出为电子表格,点击以后过几分钟会弹出这样的窗口: 然后我只需要检测 " ...
- python怎么生成不重复的字符_如何在不重复的情况下生成一组字符的所有组合?...
我有以下清单:['a', 'b', 'c'] 我正在寻找一种方法来生成所有可能的字符串,这些字符串包含以下限制:一个字符不能出现多次(aab,aba,abca等无效) 可以排除字符(ab有效,即使c不 ...
- 为什么用python扒取出来的数据为空列表_如何解决python xpath爬取页面得到空列表(语法都对的情况下)...
引言: 很多网页呈现给我们的静态页面,但是实际上是由服务器端的动态页面生成的.再加上网站设有反爬虫机制,所以抓取到的页面不一定和源码相同. 所以!!从源码里copy xpath,不一定能取到数据! 实 ...
最新文章
- JQuery解析JSON数据
- PHP之提取多维数组指定列的方法
- WebLogic使用总结(一)——WebLogic安装
- php 支付宝手机端_PHP 手机支付宝接口
- ubuntu卸载vsftpd出错
- leetcode 219. 存在重复元素 II(规定步长)
- 火狐web开发清楚缓存_如何使用Firefox的Web开发工具
- 多智能体强化学习_基于多智能体强化学习主宰星际争霸游戏
- 恒大健康上半年营收同比增132% 新能源汽车将成新增长点
- Linux学习笔记006----Linux命令ps使用详解
- jxl java mer_导出报表出错,有没有大神懂得
- uni-app:mescroll-uni 实现上拉加载,下拉刷新
- 【Unity3D】表格
- 深入浅出谈LPWAN物联网通信技术
- 一个屌丝程序猿的人生(五十)
- CHROME扩展笔记之webRequest·图片拦截
- word自动编号变成黑块儿的原因及解决方案
- 西门子plc s7-200写的先进先出范例 用fifo
- 洗衣店小程序v2.6.5+小程序前端全开源版安装教程
- 【活动】请注意:一大批Q币正在来袭
热门文章
- python解包wxapkg_微信小程序wxapkg解包器c++版(免装py环境 绿色90k)
- Tableau上面地图与条形图结合_Tableau | 20种常用图表(上文)
- CUDA 多GPU调用实现
- TensorFlow安装中遇到的问题
- GridView上同时定义了 DataSource 和 DataSourceId
- tf.gradients ---错误FetchargumentNonehasinvalidtype
- VMware 克隆的相关设置
- 【转载】深入理解Java内存模型——final
- Spark Streaming ReceiverTracker架构设计
- Android ListView中EditView再次焦点获取