运用argparse控制模块完成脚本制作cmd参数分析
#编码实践活动1
study.py內容以下
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' import argparse def argparseFunc(): ''' 根据argparse控制模块完成指令参数分析作用 实行实例: python study.py -i 172.19.7.236 -p 8080 -a -r python study.py --ip 172.19.7.236 --port 7077 --auth -w -v True ''' parser = argparse.ArgumentParser(description="study.py usage help document") # 添加没有默认值的可分析参数 parser.add_argument("-i", "--ip", help="ip addr") #留意: -h 、--help为内嵌参数 ,不能用 parser.add_argument("-p", "--port",help="host port") # 添加带默认值的可分析参数(# action = store_true 表明是假如应用了这一参数,则值参数值设定为True # 大量action配备可参照源代码 # 必须留意的是,不可以为带默认值参数特定参数值 ,会出错,该参数值会被作为不鉴别的参数 parser.add_argument("-a", "--auth", help="if auth need", action="store_true") # 添加相互独立参数(例如 例中的-r和-w 另外只有用一个) exclusive_group = parser.add_mutually_exclusive_group() exclusive_group.add_argument("-r","--read", help="read enabled" , action="store_true") exclusive_group.add_argument("-w","--write", help="write enabled", action="store_true") # 添加参数时不设定设定参数表明 parser.add_argument('-v') # show verbose # 添加参数时不设定参数全称 parser.add_argument('-V', help="version") ARGS = parser.parse_args() # 获得cmd参数 print('ARGS:', ARGS) # 获得某一参数值 if ARGS.ip: # 留意,这儿的参数名 ,务必应用参数全名 print("host addr is: %s" % ARGS.ip) if ARGS.port: print("host port is: : %s" % ARGS.port) if ARGS.auth: print("auth need: : %s" % ARGS.auth) if ARGS.read: print("read enabled: %s" % ARGS.read) if ARGS.write: print("write enabled: %s" % ARGS.write) argparseFunc()
运作检测
python study.py -i 172.19.7.236 -p 8080 -a -r python study.py --ip 172.19.7.236 --port 7077 --auth -w -v True
結果以下
python study.py -i127.0.0.1 # 留意,参数和参数值中间能够沒有空格符
結果以下
python study.py -notExists 1
結果以下
如上,之上编码完成是对于单独控制模块脚本制作,假如要在好几个控制模块中应用该怎么办?解决方案为封裝为类 ,实际参照“编码实践活动2”
#编码实践活动2
argument_parser.py #!/usr/bin/env python # -*- coding:utf-8 -*- ''' @Author : shouke ''' import argparse class ArgParser(object): ''' 参数在线解析 ''' def __init__(self, none_exclusive_arguments, exclusive_arguments, description=''): self.parser = argparse.ArgumentParser(description=description) self.add_none_exclusive_arguments(none_exclusive_arguments) self.add_exclusive_arguments(exclusive_arguments) def add_none_exclusive_arguments(self, options:list): ''' 添加基本选择项(非相互独立选择项) :param options 文件格式为list种类,形如 [ '"-a", "--all", help="do not ignore entries starting with ."', '"-b", "--block", help="scale sizes by SIZE before printing them"', '"-C", "--color", help="colorize the output; WHEN can be 'never', 'auto'"', '"-flag", help="make flag", action="store_true"', # action="store_true" 表明如果不设定该选择项的值,则默认值为true ,相近的action="store_false" 表明默认值为false ] 在其中,每一个list原素为argparse.ArgumentParserlei add_argument类涵数实参的字符串数组表明,add_argument函数定义add_argument(self, *args,**kwargs) ''' for option in options: eval('self.parser.add_argument(%s)' % option) def add_exclusive_arguments(self, options:list): ''' 添加相互独立选择项 :param options 文件格式为list ,形如下列 [ ('"-r","--read",help="Read Action",action="store_true"', '"-w","--write",help="Write Action",action="store_true"') ] ''' for option_tuple in options: exptypegroup = self.parser.add_mutually_exclusive_group() for item in option_tuple: eval('exptypegroup.add_argument(%s)' % item) @property def args(self): return self.parser.parse_args()
在xxx.py中引入(留意:为了更好地让参数在线解析具有该起的功效,提议在脚本制作最上边结构参数在线解析目标)
study.py內容以下
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'shouke' from argument_parser import ArgParser none_exclusive_arguments = [ '"-ip", help="功能测试综合服务平台详细地址"', '"-projectId", help="功能测试新项目id"', '"-runEnv", help="功能测试新项目软件环境"', '"-logLevel", help="日志等级"', '"-masterHost", help="master服务项目详细地址"', '"-masterPort", help="master服务项目端口号"' ] exclusive_arguments = [ ('"-r", "--read", help="Read Action",action="store_true"', '"-w", "--write", help="Write Action",action="store_true"') ] args = ArgParser(none_exclusive_arguments, exclusive_arguments).args print(args) print(args.ip) print(args.read)
运作检测
python study.py -i 127.0.0.1 -r
运作結果以下