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)

最新文章

  1. serialize和unserialize函数
  2. C#装箱和拆箱
  3. ArcGIS百米网格自动生成
  4. Wordpress基础:精简头部wp_head
  5. How to install and configure Azure PowerShell
  6. android编程常见问题-No Launcher activity found!
  7. Jmeter 快速入门教程(三-1) --添加响应断言(即loadrunner中所指的检查点)
  8. 关于简明Vim练级攻略
  9. nginx如何解决超长请求串
  10. 最近在学习UDP方面的通信,找到一个很棒的博客
  11. Linux下实现视频读取(二)---camera參数设定
  12. Jackson学习(一)
  13. LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx
  14. 从零开始学习PYTHON3讲义(六)for循环跟斐波那契数列
  15. socket基础编程-1
  16. React文档(十)表单
  17. ajax 删除数据无刷新
  18. latex 脚注编号也成为超链接
  19. TableView编辑状态下跳转页面的崩溃处理
  20. Node.js学习笔记(1) - Node.js简介

热门文章

  1. 【.NET 与树莓派】数模转换
  2. hdu1978 简单记忆化搜索
  3. Linux下用SUID提权
  4. WPScan工具的使用(WordPress扫描工具)
  5. UVA10827球面上的最大和
  6. Weblogic SSRF漏洞(CVE-2014-4210)
  7. Win64 驱动内核编程-28.枚举消息钩子
  8. NumPy中文文档搬砖(划掉)学习笔记(1)
  9. 游戏视野系统算法 (FOV using recursive shadowcasting)
  10. C++ primer plus读书笔记——第17章 输入、输出和文件