基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?
简单介绍:
说明: 在指定命名空间中计算参数字符串的有效表达式,并返回一个对象,
Help on built-in function eval in module __builtin__:eval(...)eval(source[, globals[, locals]]) -> valueEvaluate the source in the context of globals and locals.The source may be a string representing a Python expressionor a code object as returned by compile().The globals must be a dictionary and locals can be any mapping,defaulting to the current globals and locals.If only globals is given, locals defaults to it.
技巧: eval很危险,因为它默认在当前命名空间中解析语句表达式,但它支持设定命名空间防止当前命名空间被污染,可以有效防止注入
最佳实践:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# OsChina: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
# 说明: 兼容绝对导入
from __future__ import absolute_import
# 说明: 导入公共模块
import time
import operator
# 说明: 导入其它模块
from .alarm import alarm_template
from .alarm.api import weixin_notifydef avg(alarmtmplist, redis_key, trigg_key, trigg_val, errors):scope = {}realdata_lst = [](service_name, converts_val, during_time, _, operator_val,compare_time, warnning_val, critical_val) = trigg_valconvertsfunc = eval(converts_val, scope)warnning_val = convertsfunc(warnning_val)critical_val = convertsfunc(critical_val)datacate, host, plugin = redis_key.split('::')operatorfunc = getattr(operator, operator_val)for cur_item in alarmtmplist:cur_item = convertsfunc(cur_item['data']['target'])realdata_lst.append(cur_item)avg_realdata = sum(realdata_lst)/len(realdata_lst)warnning_res = operatorfunc(avg_realdata, warnning_val)critical_res = operatorfunc(avg_realdata, critical_val)msgtime = time.strftime('%H:%M:%S', time.localtime())formats = 'PLUGIN(%s) DURINGTIME(%s) COMPARETIMES(%s) AVG(%s) OPERATION(%s) TARGET(%s)'if critical_res:message = formats % (plugin, during_time, compare_time, avg_realdata, operator_val, critical_val)res_msg = alarm_template % (host, 'critical', errors, msgtime, message)weixin_notify(res_msg)returnif warnning_res:message = formats % (plugin, during_time, compare_time, avg_realdata, operator_val, warnning_val)res_msg = alarm_template % (host, 'warnning', errors, msgtime, message)weixin_notify(res_msg)return
说明: 此文件本是预警系统阀值处理接口文件,传递过来的参数converts_val可能为str/int/float等类型名称,都属于内置函数名,为了不污染当前线程运行环境同名内置函数,定义一个空scope,搜索时就在scope的__builtins__中调用纯净的str/int/float等内置函数,如果不定义,线程下次运行时可能就找不到str/int/float等内置函数.
转载于:https://blog.51cto.com/xmdevops/1860640
基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?相关推荐
- python 运维包_基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?
常规导入:import module_name[,module1,...] from module_name import [*|child[,child1,...] from module_name ...
- 运行无间:阿里巴巴运维保障体系的一种最佳实践
本文根据 GOPS2017·上海站演讲<阿里巴巴运维保障体系的一种最佳实践>整理发布 前言 阿里巴巴全球运行指挥中心,GOC (Global Operations Center)保障阿里经 ...
- 黑马-零基础入门linux系统运维
Day1:Linux发展史与安装 一.Linux发展史 1.Linux前身-Unix 1968年 Multics项目 MIT.Bell实验室.美国通用电气有限公司走到了一起,致力于开发Multics项 ...
- python的运维开发课程_Python自动化运维开发实战课程方案
课程简介:? ? 随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分.面对越来越复杂的业务以及日趋多样化的用户需求,不断扩展的IT应用需要合理的IT运维保障IT服务灵活便捷.安全稳定 ...
- python运维系统开发_Python系统运维开发实战
课程主题: Python 高级运维开发实战 课程讲师: Alex 老师, triaquae python 开源运维管理软件创始人,知名 IT 公司运维开发架构师 课程安排: 每周六一天全天(早 9:0 ...
- mysql 自动化运维开发_Python自动化运维开发----基础(十三)Mysql数据库基础
1.MYSQL 语言的分类 (1) DDL 数据库定义 (2) DQL 数据库查询 (3) DML 数据库操作 (4) DCL 数据库权限 2.MYSQL 操作 (1) 创建数据库mysql> ...
- python运维开发_Python自动化运维开发----基础(一)
前言:环境是python3 1.第一个python程序(在学任何一门语言的时候第一程序好像都是hello world),下边我们用python的解释器去输出一个hello world>>& ...
- Linux基本命令(学习笔记)零基础入门linux系统运维
linux基本指令 1, ls 列出当前工作目录下所有文件/文件夹名称 用法1:#ls 含义:列出当前工作目录下所有文件/文件夹名称 用法2:#ls 路径 含义:列出指定路径下的所有文件/文件夹的名称 ...
- Python运维开发基础01-语法基础【转】
开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...
最新文章
- 到底什么是P问题,NP问题,NPC问题,NP-hard问题?什么是规约(或约化)?
- MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集
- JS动态添加、删除classl类
- mvc json 乱码_你了解JSON吗?——Jackson、FastJson在SpringMVC中的简单使用
- 平均月薪超过1万的北京人是这样上班的|大数据解读(视频)
- 1046. 划拳(15)-PAT乙级真题
- react build后直接从浏览器打开
- 时间序列深度学习:状态 LSTM 模型预测太阳黑子(上)
- cv2读取带中文路径方法
- 单词前缀dia/dis/duo/en/epi/eu等衍生单词(辅助记忆)
- selenium模块
- ubuntu 安装网卡驱动
- 微信后台基于时间序的海量数据冷热分级架构设计实践
- sql server 2000只有企业管理器不能打开?
- 智能车图像处理-阳光算法
- 等待事件统计视图 | 全方位认识 sys 系统库
- 软件测试用例设计方法(一)
- 避免创业的大忌,我为何给 TDengine 只选择了集群、高性能与 SQL 支持三大特点?
- Converting Phase Noise to Time Jitter
- 对几个汇编编译器的初步评价(MASM/FASM/NASM/GOASM)
热门文章
- Tensorflow 指令加速
- 基于RBF简单的matlab手写识别
- 在VNC远程桌面环境Xfce4中Tab键失效的解决方法
- 最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。
- Redis 热点key
- 算法实践--最小生成树(Kruskal算法)
- BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
- IOS-C语言第8天,Struct (结构体)
- eclipse 3.7安装扩展心得
- java文件读写操作指定编码格式[转]