openresty 学习笔记番外篇:python的一些扩展库

要写一个可以使用的python程序还需要比如日志输出,读取配置文件,作为守护进程运行等

读取配置文件

使用自带的ConfigParser模块

import os
import ConfigParser

  

获取配置文件路径并进行读取

path = os.path.realpath(__file__)
path = os.path.dirname(path)
configPath = path + '/config.cfg' config = ConfigParser.ConfigParser()
config.read(configPath)

  

使用方法

agentConfig = {}
agentConfig['MYSQLport'] = config.get('MySQL', 'port')

  

日志输出

使用自带的logging库

import logging
import logging.handlers

定义日志级别

loggingLevelMapping = {
'debug': logging.DEBUG,
'info': logging.INFO,
'error': logging.ERROR,
'warn': logging.WARN,
'warning': logging.WARNING,
'critical': logging.CRITICAL,
'fatal': logging.FATAL,
} customLogging = config.get('Logging', 'logging_level')
agentConfig['LOGGINGlevel'] = loggingLevelMapping[customLogging.lower()]

定义日志文件路径和格式

logFile = agentConfig['LOGGINGfile']
handler = logging.handlers.RotatingFileHandler(logFile, maxBytes=10485760, backupCount=10) # 10MB files
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) mainLogger = logging.getLogger('main')
mainLogger.setLevel(agentConfig['LOGGINGlevel'])
mainLogger.addHandler(handler)
使用方法 mainLogger.info(" Messages Done")
mainLogger.debug(" ACK Messages")

守护进程

使用第三方库Python daemonizer class

from daemon import Daemon

定义一个类继承守护进程并且有run()方法

class pantalaimon(Daemon):
def run(self):
# Do stuff pidFile = agentConfig['DAEMONpid']
daemon = pantalaimon(pidFile)

对守护进程的各种操作

if 'start' == sys.argv[1]:
daemon.start() elif 'stop' == sys.argv[1]:
daemon.stop() elif 'restart' == sys.argv[1]:
daemon.restart() elif 'foreground' == sys.argv[1]:
daemon.run() elif 'status' == sys.argv[1]:
try:
pf = file(pidFile,'r')
pid = int(pf.read().strip())
pf.close()
except IOError:
pid = None
except SystemExit:
pid = None if pid:
print 'is running as pid %s.' % pid
else:
print 'is not running.' else:
print 'Unknown command'
sys.exit(1)

openresty 学习笔记番外篇:python的一些扩展库的更多相关文章

  1. openresty 学习笔记番外篇:python访问RabbitMQ消息队列

    openresty 学习笔记番外篇:python访问RabbitMQ消息队列 python使用pika扩展库操作RabbitMQ的流程梳理. 客户端连接到消息队列服务器,打开一个channel. 客户 ...

  2. 《30天自制操作系统》学习笔记--番外篇之Mac环境下的工具介绍

    这几天又有点不务正业了,书也没看,一直在搞这个破环境,尝试各种做法,网上各种垃圾信息,浪费了很多时间,说的基本都是废话,不过还是找到了一些,赶紧写下来,不然这个过几天又忘了 首先是环境,我用的是Max ...

  3. Python学习-day10(番外篇) 阻塞IO 非阻塞IO 同步IO 异步IO

    这个章节的内容是关于IO的概念,谈一谈什么是 阻塞IO 非阻塞IO 同步IO 异步IO.以下摘要是我对这四种IO的一个形象理解. 场景是去去银行办理业务.节点有三个,1)到银行提交申请:2)取号:3) ...

  4. H5学习_番外篇_PHP数据库操作

    1. 文件操作 1.1 打开关闭文件 fopen() resource fopen ( string filename, string mode [, bool use_include_path [, ...

  5. vue学习【番外篇】vue-cli脚手架的安装

    大家好,我是一叶,今天和大家分享的是vue-cli脚手架的安装,关于vue-cli的优点,我就不赘述了. 一.检查安装node 安装vue-cli之前,先检查node是否安装.win+R,输入cmd打 ...

  6. OpenCV 学习笔记(1-1)opecv3.41及其扩展库在VS2015下配置

    其他正常 opencv_aruco341.lib opencv_bgsegm341.lib opencv_bioinspired341.lib opencv_calib3d341.lib opencv ...

  7. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记番外(1) - JLinkScript妙用

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记番外篇之JLinkScript妙用. JLinkScript 文件是配套 J-Link 调试器使用的脚本,这个脚本适 ...

  8. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  9. Netty学习笔记(番外篇) - ChannelHandler、ChannelPipeline和ChannelHandlerContext的联系

    这一篇是 ChannelHandler 和 ChannelPipeline 的番外篇,主要从源码的角度来学习 ChannelHandler.ChannelHandler 和 ChannelPipeli ...

随机推荐

  1. 爬虫简介、requests 基础用法、urlretrieve()

    1. 爬虫简介 2. requests 基础用法 3. urlretrieve() 1. 爬虫简介 爬虫的定义 网络爬虫(又被称为网页蜘蛛.网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程 ...

  2. Python表达式进阶——列表表达式

    x = 0 y = x*2 if x >= 0 else x print(y) # [表达式for变量in列表] l1 = [] l2 = [i for i in range(100) if i ...

  3. 034- do_while语句

    语法 初始化语句; do { 循环体语句; 控制条件语句; }while(boolean表达式); 执行过程: 首先会执行do循环体中的语句,然后运算while中的boolean表达式,如果是true ...

  4. Android Hook框架adbi的分析(1)---注入工具hijack

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/74055505 一.Android Hook框架adbi的基本介绍 adbi是And ...

  5. C++ 模板元编程简单小栗子

    最近看了看模板的元编程,感觉有点意思. 一些计算可以在编译过程就能够完成,榨干编译器的最后一点资源. stl中用的全是这些玩意. 当然,这增加了编译时长. 我记得貌似有"图灵完备" ...

  6. ConcurrentHashMap源码解读三

    今天首先讲解helpTransfer方法 final Node<K,V>[] helpTransfer(Node<K,V>[] tab, Node<K,V> f) ...

  7. IIS部署.Net5全流程

    介绍 Internet Information Services (IIS) 是一种灵活.安全且可管理的 Web 服务器,用于托管 Web 应用(包括 ASP.NET Core).虽然我们的程序可以跨 ...

  8. Pytorch实现对卷积的可插拔reparameterization

    需要实现对卷积层的重参数化reparameterization 但是代码里卷积前weight并没有hook,很难在原本的卷积类上用pure oo的方式实现 目前的解决方案是继承原本的卷积,挂载一个we ...

  9. Visual Lab Online —— Alpha版本发布声明

    Visual Lab Online -- Alpha版本发布声明 项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:Alpha阶段发布声明 发布声明 目录 Visual Lab Onli ...

  10. OO_Unit4_UML模型化设计

    CSDN博客传送门 @ 目录 一.架构设计 (一)第一次作业 作业需求分析 建立类图 bug修复 (二)第二次作业 作业需求分析 建立类图 checkForUml002实现方式 checkForUml ...