Python argparse 模块
argparse模块用于从命令行直接读取参数,简单用法如下:
[root@localhost ~]$ vim 1.py #!/usr/bin/env python import argparse parser = argparse.ArgumentParser(description="script description", usage="xxxx") # description="xxxx" :用于描述脚本的用途,可以为空,会在使用 python 1.py -h 查看帮助时显示 parser.add_argument('--verbose', '-v', action='store_true', help='verbose mode') # usage="xxxxx" :用于描述命令行参数的用法,如果使用没有自定义的命令行参数,如 python 1.py -a 则会提示这个信息 args = parser.parse_args() # add_argument :用于添加可用的命令行参数,表明我们可以使用 python 1.py --verbose 或 python 1.py -v # action="store_true" :表示当读取的命令行参数中出现 --verbose/-v 时,参数字典的verbose键对应的值为True if args.verbose: # help="verbose mode" :用于描述--verbose参数的用途或意义,会在使用 python 1.py -h 查看帮助时显示 print "Verbose mode on!" # 其他可选参数: else: # required=True :指定执行脚本时必须要加上该命令行参数,否则会报错 print "Verbose mode off!" # type=int :指定该命令行参数的值的类型,如 python 1.py -v 123;另外还可以指定是文件类型,如 type=argparser.FileType('r')
# choices=['a', 'b', 'c'] :表示该命令行参数能接受的值只能来自指定的候选值中,如 python 1.py -v a
# default="abcd" :用于指定命令行参数的默认值,如 python 1.py -v 相当于 python 1.py -v abcd
# dest="abcd" : 自定义ArgumentParser的参数属性名称,如果不定义我们是 args.verbose 调用,如果定义是 args.abcd 这样调用
[root@localhost ~]$ python 1.py # 如果不加 -v 参数,则 args.verbose 值为 False,返回 "Verbose mode off!"
Verbose mode off!
[root@localhost ~]$ python 1.py -v # 如果加上 -v 参数,则 args.verbose 值为 True,返回 "Verbose mode on!"
Verbose mode on!
[root@localhost ~]$ python 1.py -h # -h 参数用于查看帮助信息,该参数不需要定义,默认就有的 usage: 1.py [-h] [--verbose] script description optional arguments: -h, --help show this help message and exit --verbose, -v verbose mode
[root@localhost ~]$ python 1.py -a # 如果我们使用没有自定义的参数,则会提示 usage="xxxxx" 定义的内容
usage: xxx
1.py: error: unrecognized arguments: -a
线上用法:
def qfhelp(): usage = ''' ./%(prog)s -f qianfuList.ini -u userName ''' parser = argparse.ArgumentParser(usage=usage) parser.add_argument('-a', dest="action", help="动作:create, dns", required=True, choices=['init', 'initM', 'create', 'dns']) parser.add_argument('-u', dest="username", help="名称标识:GeBiLaoWang", required=True) parser.add_argument('-c', dest="channel", help="机器channel:37", default="37", required=False) parser.add_argument('-f', dest="qffile", type=argparse.FileType('r'), help="create:platcode serverid1,serverid2 IP/dns:platcode,serverid,ip,port") return parser.parse_args() if __name__ == '__main__': opt = qfhelp() if opt.action == 'init': content = opt.qffile.readlines() qf = QianfuAutoSelect(content, opt.channel, opt.username) qf.doit() elif opt.action == 'initM': content = opt.qffile.readlines() content = [i.strip() for i in content if i != ""] new_content = list() allserver = getAllServer(allserver_url) for server in allserver.split('\n'): if not server: continue serverlist = server.split(',') if serverlist[2] in content: new_content.append("{platform} {serverid}".format(platform=serverlist[0], serverid=serverlist[1])) qf = QianfuAutoSelect(new_content, opt.channel, opt.username) qf.doit() elif opt.action == 'create': content = opt.qffile.readlines() qf = Qianfu(content, opt.username) qf.doit() elif opt.action == 'dns': content = opt.qffile.readlines() qfdns = DNSModify(content) qfdns.recordmodify() else: print("醒醒!!!")