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

        

  • 相关阅读:
    巧用nginx屏蔽对用户不可见的文件
    关于之前我的主页页面加载很慢的问题
    学习Entity Framework 中的Code First
    理解POCO
    浅谈依赖注入
    从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
    ASP.NET Identity V2
    泛型约束
    C# Serializable
    C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo
  • 原文地址:https://www.cnblogs.com/pzk7788/p/10241279.html
Copyright © 2020-2023  润新知