简单介绍:
此模块提供命令行选项解析,目前支持短格式和长格式选项
快速安装:
说明: 内建模块无需安装
解析方法:
getopt(args, shortopts, longopts = []) -> (opts, args)
说明: args为要解析的参数序列,常为sys.argv[1:],shortopts为单字符选项定义串,如果某个选项需要一个参数,响应字母后面必须有一个冒号,longopts为长格式的选项名序列,可以包含多个字符,序列元素必须包含--前缀,如果此长选项需要参数则其名应包含后缀=,而且短格式和长格式可以在调用中结合使用,最终返回一个选项元组序列opts和非选项元组序列args
应用场景:
1. 规范化的程序目录结构及代码风格推荐我们程序配置从外部加载,不要写死,想想运维中nginx/等应用都是利用getopt解析命令行参数?
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # OsChina: http://xmdevops.blog.51cto.com/ # Purpose: # """ # 说明: 导入公共模块 import os import sys import getopt import ConfigParser # 说明: 导入其它模块 program = __file__ version = '1.0.0.1' # 说明: 显示使用说明 def show_usage_info(): message = '''%s version: %s/%s Usage: xmzoomeye-agent [-hv] [-c filename] [-l filename] Options: -h : this help -v : show version and exit -c : set running configuration file (default: docs/default.ini) -l : set logging configuration file (default: docs/logging.ini) ''' % (program, program, version) print message # 说明: 检测参数指定 def parameters_test(): try : opts, args = getopt.getopt(sys.argv[ 1 :], 'hvc:l:' , []) except getopt.GetoptError, e: print '%s: %s' % (program, e) sys.exit() exit_flag = [ 0 , 0 , 0 ] for key, val in opts: if '-v' = = key: print 'version: %s/%s' % (program, version) exit_flag[ 0 ] = 1 if '-h' = = key: show_usage_info() exit_flag[ 0 ] = 1 if '-c' = = key: exit_flag[ 1 ] = 1 if '-l' = = key: exit_flag[ 2 ] = 1 if exit_flag[ 0 ]: sys.exit() if not all (exit_flag[ 1 :]): print '%s: option -c/-l requires arguments' % (program,) sys.exit() return dict (opts) # 说明: 检测配置文件 def configuration_test(opts): cf = {} cp = ConfigParser.ConfigParser() for opt, arg in opts.iteritems(): if not os.path.exists(arg): print '%s: no such config file %s' % (program, arg) sys.exit() runconfig = os.path.abspath(opts[ '-c' ]) with open (runconfig, 'r+b' ) as handler: cp.readfp(handler, runconfig) sections = cp.sections() if 'redis' not in sections or 'agent' not in sections: print '%s: no redis and agent section' % (program,) sys.exit() for section in sections: if section not in cf: cf.setdefault(section, {}) cf[section].update(cp.items(section)) return cf if __name__ = = '__main__' : pass |
说明: 如上案例简单的利用getopt解析命令行参数,利用ConfigParser解析ini配置文件最终返回字典,方便主程序加载,而并没有在主程序中写死,这样更方便程序的单元代码编写和审查.
登录乐搏学院官网
或关注我们的官方微博,还有更多惊喜哦~
本文出自 “” 博客,请务必保留此出处