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("醒醒!!!")

 

 

 

 

 

 

    

posted @ 2019-01-08 20:31  孔雀东南飞  阅读(527)  评论(0编辑  收藏  举报