Python处理配置与日志
线上脚本比较常见的几个功能点包括:读取命令行,读取配置文件,写日志文件,下面逐一介绍,介绍采用示例代码的形式。1 Optparse 解析命令行参数模块
Optparse模块可以解析程序的命令行参数,用法如下:
1
2
3
4
5
6
7
|
def _init_opt():
#解析命令行,配置文件选项
import
optparse
parser = optparse.OptionParser()
parser.add_option(
'-c'
,
'--config'
, action=
"store"
, dest=
"config"
,
default
=
"./conf/xxx.conf"
, help=
"config file path"
)
options, remainder = parser.parse_args()
return
options
|
1
2
3
4
|
|
使用optparse模块的步骤如下: 首先,必须 import OptionParser类,创建一个 OptionParser对象:
1
2
3
|
from optparse
import
OptionParser
[...]
parser = OptionParser()
|
1
2
|
parser.add_option(opt_str, ...,
attr=value, ...)
|
1
|
parser.add_option(
"-f"
,
"--file"
, ...)
|
1
|
(options, args) = parser.parse_args()
|
- options,它是一个对象(optpars.Values),保存有命令行参数值。只要知道命令行参数名,如 file,就可以访问其对应的值: options.file 。
- args,它是一个由 positional arguments 组成的列表。
2 ConfigParser读、写配置文件模块
ConfigParser模块用来解析配置文件,配置文件格式如下:
1
2
3
4
5
6
7
8
9
10
|
[file]
# 注释而已
rel_file = ./relfile
word_file = ./wordfile
[thres]
word_freq_thres =
200
[log]
log_file = ./log/delhighfreq.log
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def _init_conf(options):
#读取配置文件
import
ConfigParser
configfile = options.config
config = ConfigParser.ConfigParser()
config.read([configfile])
# 读取三个配置项
conf_ok = []
conf_ok.append(config.get(
"log"
,
"log_file"
))
conf_ok.append(config.get(
"file"
,
"rel_file"
))
conf_ok.append(config.get(
"file"
,
"word_file"
))
thres = config.getint(
"thres"
,
"word_freq_thres"
)
conf_ok.append(thres)
return
conf_ok
|
3 logging 日志模块
Logging模块使用起来非常简单方便,示例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
def _init_log(logfile):
# 生成log对象
logger = logging.getLogger()
# 日志打印到磁盘;默认输出模式为
'a'
(文件末尾追加写)
# 除了FileHandler,还支持SocketHandler, SMTPHandler等
hdlr = logging.FileHandler(logfile)
# 设置日志格式
formatter = logging.Formatter(
'%(asctime)s %(levelname)s %(message)s'
)
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.DEBUG)
return
logger
# 下面是使用logger打印日志
def run():
logger = _init_log(logfile)
logger.debug(“debug info”)
logger.info(
"info message"
)
…………
|
logging还支持用配置文件初始化,如下:
1
2
3
4
5
6
7
8
9
10
|
import
logging
import
logging.config
logging.config.fileConfig(
"logging.conf"
)
# create logger
logger = logging.getLogger(
"simpleExample"
)
#
"application"
code
logger.debug(
"debug message"
)
|
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
|
[loggers]
keys=root,simpleExample
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=
0
[handler_consoleHandler]
class
=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
|