带有日志记录和选项解析的Python控制台应用程序模板。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有日志记录和选项解析的Python控制台应用程序模板。相关的知识,希望对你有一定的参考价值。
#!/usr/bin/env python # -*- coding: utf-8 -* u"""Program name - short description Example usage ============= .. sourcecode:: bash python program_name.py -vvvvv action :author: `Name Surname <mailto:[email protected]>`__ """ # Pylint checks # "line to long" pylint: disable-msg=C0301 # "Used * or ** magic" pylint: disable-msg=W0142 __revision__ = "$Id$" __docformat__ = 'restructuredtext en' import os, sys, logging, optparse #: Glogbal logger instance LOG = logging.getLogger(__name__) #: Debug level names as a string LOG_HELP = ','.join(["%d=%s" % (4-x, logging.getLevelName((x+1)*10)) for x in xrange(5)]) #: Console LOG format LOG_FORMAT_CONS = '%(asctime)s %(name)-12s %(levelname)8st%(message)s' #: File LOG format LOG_FORMAT_FILE = '%(asctime)s %(name)s[%(process)d] %(levelname)10s %(message)s' #: Levels of logging translation (count of -v, log level) LOGLEVEL_DICT = { 1 : 50, 2:40, 3:20, 4:10, 5:1 } DEFAULT_VERBOSITY = 0 def default_action(): """ Does foo and bar """ LOG.info("Default action done") def main(): """ Main function - parses args and runs action """ parser = optparse.OptionParser(usage="%prog or type %prog -h (--help) for help", description=__doc__, version="%prog" + __revision__) parser.add_option("-v", action="count", dest="verbosity", default = DEFAULT_VERBOSITY, help = "Verbosity. Add more -v to be more verbose (%s) [default: %%default]" % LOG_HELP) parser.add_option("-l", "--logfile", dest="logfile", default = None, help = "Log to file instead off console [default: %default]" ) (options, args) = parser.parse_args() verbosity = LOGLEVEL_DICT.get(int(options.verbosity), DEFAULT_VERBOSITY) # Set up logging if options.logfile is None: logging.basicConfig(level=verbosity, format=LOG_FORMAT_CONS) else: logfilename = os.path.normpath(options.logfile) logging.basicConfig(level=verbosity, format=LOG_FORMAT_FILE, filename=logfilename, filemode='a') print >> sys.stderr, "Logging to %s" % logfilename # Run actions LOG.info("Starting %s, rev %s from %s using verbosity %s/%s as PID %d", __name__, __revision__, os.path.abspath(__file__), options.verbosity, verbosity, os.getpid()) for action in args: if action == 'raise': raise Exception("User requested exception") else: default_action() LOG.info("Exited %s, rev %s from %s using verbosity %s/%s as PID %d", __name__, __revision__, os.path.abspath(__file__), options.verbosity, verbosity, os.getpid()) if __name__ == "__main__": main()
以上是关于带有日志记录和选项解析的Python控制台应用程序模板。的主要内容,如果未能解决你的问题,请参考以下文章
python多处理日志记录:带有RotatingFileHandler的QueueHandler“文件被另一个进程使用”错误