简单介绍:

说明: 在指定命名空间中计算参数字符串的有效表达式,并返回一个对象,

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内建函数的最佳实践?相关推荐

  1. python 运维包_基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?

    常规导入:import module_name[,module1,...] from module_name import [*|child[,child1,...] from module_name ...

  2. 运行无间:阿里巴巴运维保障体系的一种最佳实践

    本文根据 GOPS2017·上海站演讲<阿里巴巴运维保障体系的一种最佳实践>整理发布 前言 阿里巴巴全球运行指挥中心,GOC (Global Operations Center)保障阿里经 ...

  3. 黑马-零基础入门linux系统运维

    Day1:Linux发展史与安装 一.Linux发展史 1.Linux前身-Unix 1968年 Multics项目 MIT.Bell实验室.美国通用电气有限公司走到了一起,致力于开发Multics项 ...

  4. python的运维开发课程_Python自动化运维开发实战课程方案

    课程简介:? ? 随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分.面对越来越复杂的业务以及日趋多样化的用户需求,不断扩展的IT应用需要合理的IT运维保障IT服务灵活便捷.安全稳定 ...

  5. python运维系统开发_Python系统运维开发实战

    课程主题: Python 高级运维开发实战 课程讲师: Alex 老师, triaquae python 开源运维管理软件创始人,知名 IT 公司运维开发架构师 课程安排: 每周六一天全天(早 9:0 ...

  6. mysql 自动化运维开发_Python自动化运维开发----基础(十三)Mysql数据库基础

    1.MYSQL 语言的分类 (1) DDL 数据库定义 (2) DQL 数据库查询 (3) DML 数据库操作 (4) DCL  数据库权限 2.MYSQL  操作 (1) 创建数据库mysql> ...

  7. python运维开发_Python自动化运维开发----基础(一)

    前言:环境是python3 1.第一个python程序(在学任何一门语言的时候第一程序好像都是hello world),下边我们用python的解释器去输出一个hello world>>& ...

  8. Linux基本命令(学习笔记)零基础入门linux系统运维

    linux基本指令 1, ls 列出当前工作目录下所有文件/文件夹名称 用法1:#ls 含义:列出当前工作目录下所有文件/文件夹名称 用法2:#ls 路径 含义:列出指定路径下的所有文件/文件夹的名称 ...

  9. Python运维开发基础01-语法基础【转】

    开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...

最新文章

  1. 到底什么是P问题,NP问题,NPC问题,NP-hard问题?什么是规约(或约化)?
  2. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集
  3. JS动态添加、删除classl类
  4. mvc json 乱码_你了解JSON吗?——Jackson、FastJson在SpringMVC中的简单使用
  5. 平均月薪超过1万的北京人是这样上班的|大数据解读(视频)
  6. 1046. 划拳(15)-PAT乙级真题
  7. react build后直接从浏览器打开
  8. 时间序列深度学习:状态 LSTM 模型预测太阳黑子(上)
  9. cv2读取带中文路径方法
  10. 单词前缀dia/dis/duo/en/epi/eu等衍生单词(辅助记忆)
  11. selenium模块
  12. ubuntu 安装网卡驱动
  13. 微信后台基于时间序的海量数据冷热分级架构设计实践
  14. sql server 2000只有企业管理器不能打开?
  15. 智能车图像处理-阳光算法
  16. 等待事件统计视图 | 全方位认识 sys 系统库
  17. 软件测试用例设计方法(一)
  18. 避免创业的大忌,我为何给 TDengine 只选择了集群、高性能与 SQL 支持三大特点?
  19. Converting Phase Noise to Time Jitter
  20. 对几个汇编编译器的初步评价(MASM/FASM/NASM/GOASM)

热门文章

  1. Tensorflow 指令加速
  2. 基于RBF简单的matlab手写识别
  3. 在VNC远程桌面环境Xfce4中Tab键失效的解决方法
  4. 最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。
  5. Redis 热点key
  6. 算法实践--最小生成树(Kruskal算法)
  7. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
  8. IOS-C语言第8天,Struct (结构体)
  9. eclipse 3.7安装扩展心得
  10. java文件读写操作指定编码格式[转]