基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?

简单介绍:

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

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

最佳实践:

#!/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等内置函数.

时间: 2024-10-27 21:44:54

基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?的相关文章

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

常规导入: import module_name[,module1,...]  from module_name import [*|child[,child1,...] from module_name import [*|child[,child1,...] as alias_name 注意: 导入语句可出现在程序任意位置,自定义包要实现from module_name import *的效果则此模块必须在__init__.py实现__all__ = ['module_1', 'module

基础入门_Python-模块和包.运维开发中日志模块logging的最佳实践?

简单介绍: 说明: 此模块儿提供了文件,HTTP GET/POST,SMTP,SOCKET等方式实现日志记录,甚至可以自动实现具体的日志记录方式 快速安装: pip install --upgrade logging 处理流程: 日志级别: 属性名称 属性说明 logging.NOTSET 默认为0 logging.DEBUG 调试为10 logging.INFO 一般为20 logging.WARN 警告为30 logging.ERROR 错误为40 logging.CRITICAL 严重为5

基础入门_Python-模块和包.运维开发中inspect自省模块的最佳实践?

简单介绍: 说明: 此模块提供了一系列自省函数,可获取模块/类/方法/函数/traceback/帧对象/代码对象的信息 快速安装: 内置模块 测试相关: inspect.ismodule(object) -> True/False 说明: 判断object是否为模块 inspect.isclass(object) -> True/False 说明: 判断object是否为类 inspect.ismethod(object) -> True/False 说明: 判断object是否为方法

基础入门_Python-模块和包.运维开发中内建模块getopt的最佳实践?

简单介绍: 此模块提供命令行选项解析,目前支持短格式和长格式选项 快速安装: 说明:  内建模块无需安装 解析方法: getopt(args, shortopts, longopts = []) -> (opts, args) 说明: args为要解析的参数序列,常为sys.argv[1:],shortopts为单字符选项定义串,如果某个选项需要一个参数,响应字母后面必须有一个冒号,longopts为长格式的选项名序列,可以包含多个字符,序列元素必须包含--前缀,如果此长选项需要参数则其名应包含

基础入门_Python-模块和包.运维开发中chartdet编码检测的最佳实践?

简单介绍: 说明: 此模块主要用来实现字符串/文件编码检测 快速安装: pip install --upgrade chardet 常用方法: chardet.detect(aBuf) -> dict 说明: 检测字符串编码,返回一个字典包含confidence编码匹配准确率,encoding最终检测的编码,当aBuf为空时可能encoding为None,所以最好判断一下 最佳实践: 1. FirmwareUpload会自动对接OA系统及对应SVN服务器,自动定期读取最新OA发布的固件程序及Re

基础入门_Python-模块和包.运维开发中watchdog事件监视的最佳实践?

简单介绍: 说明:  此模块是一个跨平台的PY库和SHELL工具,可以监视文件系统事件(增加/删除/修改) 快速安装: pip install --upgrade watchdog 日志记录: event_handler = LoggingEventHandler() -> event_handler 说明: 创建一个日志处理句柄,其实LoggingEventHandler是继承自FileSystemEventHandler类,只是重写了增删查改的回调函数,直接调用logging模块写到对应lo

关于金刚经在运维开发中的实践

参考 姚秦 鸠摩罗什 <金刚般若波罗蜜经> 梁 昭明太子 <金刚经>三十二品 唐 六祖惠能 六祖讲<金刚经> 关于金刚经 金刚经(<金刚般若波罗蜜经>,又译<佛说能断金刚般若波罗蜜多经>,简称<金刚经>)的核心思想,其实就是一句话:菩萨于法,应无所住,行于布施.简单概况下就是不着相(应无所住而生其心),行布施,能做到这点就算觉悟了 ,也算自觉了,成就阿罗汉果了.再后面就是觉他及觉行圆满了,据说只有佛祖释迦牟尼(姓乔达摩,名悉达多)一人

Python运维开发基础

Python基础知识分为以下几块 1.Python概述 2.基础语法 3.数据结构 4.Python进阶 5.实训案例 一.Python概述 1.Python简介 2.Hello World 3.搭建开发环境 4.习题 Python简介 尽管我是学计算机出身的,但是我对Python的认识是在毕业后.Python是我喜欢的语言,简洁,优美,容易使用.重要的一点是他是开源的项目. 官方网站 https://www.python.org 学习网站 http://www.okpython.com 对于简

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

开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶,Python网页编程,Python项目实战 Python开发基础分为语法基础篇,文件基础篇,函数基础篇,模块基础篇 语法基础篇中,我着重希望训练同学的是作为开发应该具备的一种逻辑思路. 文件基础篇中,我们需要练习的是如何将数据永久性的存储在硬盘上,提供读,写. 函数基础篇中,我重点是要引导同学们构