文档章节

eval内建函数的最佳实践

乐搏学院
 乐搏学院
发布于 2017/02/27 11:14
字数 580
阅读 16
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

简单介绍:

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

1

2

3

4

5

6

7

8

9

10

11

Help on built-in function eval in module __builtin__:

 

eval(...)

    eval(source[, globals[, locals]]) -> value

     

    Evaluate the source in the context of globals and locals.

    The source may be a string representing a Python expression

    or 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很危险,因为它默认在当前命名空间中解析语句表达式,但它支持设定命名空间防止当前命名空间被污染,可以有效防止注入

 

最佳实践:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

#!/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_notify

 

 

def 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_val

    convertsfunc = 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)

        return

    if 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等内置函数.

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1860640

© 著作权归作者所有

乐搏学院
粉丝 8
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
加载中

评论(0)

python核心编程笔记chapter 14

可调用对象: 函数:内建函数、用户定义的函数、lambda表达式。 方法:内建方法:只有内建类型有内建方法。 用户自定义的方法: 类:调用类创建实例 类的实例: 可执行的对象声明和内建函数:...

MRFung
2016/01/06
19
0
Python核心编程:第十四章

14.1 可调用的对象 许多python对象都是可调用的,即能通过函数操作符“()”来调用对象。 Python有四种可调用的对象:函数,方法,类,以及一些类的实例 14.1.4类的实例 python给类提供了名...

finndai
2016/11/21
55
0
python repr() str() ` `函数

repr() 输出对 Python比较友好,而str()的输出对用户比较友好。虽然如此,很多情况下这三者的输出仍然都是完全一样的. 内建函数str()和repr()或反引号操作符()可以方便地以字符串的方式获取...

疯子张
2014/05/20
59
0
python核心编程--第十四章

14.1 可调用对象 许多的python对象都是我们所说的可调用的,即是任何能通过函数操作符“()”来调用的对象。要调用可调用对象,函数操作符得紧跟在可调用对象之后。python有4种可调用对象:...

fzyz_sb
2013/06/19
922
4
python中的eval函数的使用详解

eval是Python的一个内置函数,功能十分强大,这个函数的作用是,返回传入字符串的表达式的结果。就是说:将字符串当成有效的表达式 来求值 并 返回计算结果。 eval函数就是实现list、dict、t...

牛大财有大才
03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

认知智能技术三大技术体系之认知维度道翰天琼

认知维度技术体系是认知智能三大技术体系(认知维度,类脑模型,万维图普)之一 。认知维度技术体系以中西方哲学思想体系,认知语言学,形式语言学,三体论等思想体系为基础,以划分人类认知...

jackli2020
28分钟前
19
0
Oracle中如何实现分页+排序? 其中遇到的问题,你,注意了嘛???

分页 + 排序 一.简单分页: 需求:分页查询台账表T_ACCOUNT,每页10条记录 分析:我们在ORACLE进行分页查询,需要用到伪列ROWNUM和嵌套查询 我们首先显示前10条记录,语句如下: select rownu...

煌sir
30分钟前
125
0
使用JavaScript获取当前URL? - Get the current URL with JavaScript?

问题: All I want is to get the website URL. 我想要的只是获取网站URL。 Not the URL as taken from a link. 不是从链接获取的URL。 On the page loading I need to be able to grab the ......

技术盛宴
40分钟前
11
0
PHP实战之Cookie会话控制

目录 1. 前言 2. HTTP协议简介及原理 2.1会话控制简介及HTTP浅析 3. COOKIE的使用 3.1 Cookie简介 3.2 cookie使用场景 3.2.1操作cookie思维导图 3.2.2操作cookie代码 3.2.3 setrawcookie的使...

六道木
41分钟前
19
0
Python笔记:批量提取PDF表格数据(每页都含有相同表头的)

现在有一份PDF数据,里面有两页,每页都有相同的数据结构但数据内容不同的数据表(每页都有相同的表头),现在需要使用Python将它批量提取出来。 我们需要使用pdfplumber模块(因为有墙的原因...

tengyulong
53分钟前
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部