zoukankan      html  css  js  c++  java
  • argparse简要用法总结

    argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数,当你的代码需要频繁地修改参数的时候,使用这个工具可以将参数和代码分离开来,让你的代码更简洁,适用范围更广。
    argparse使用比较简单,常用的功能可能较快地实现出来,下面我分几个步骤,以Python3为例,逐渐递增地讲述argparse的用法。

    1. 基本框架

    下面是使用argparse从命令行获取用户名,然后打印’Hello ‘+ 用户名,假设python文件名为print_name.py:

    # file-name:print_name.py
    import argparse
    
    def get_parser():
        parser = argparse.ArgumentParser(description="Demo of argparse")
        parser.add_argument('--name', default='Great')
        
        return parser
    
    
    if __name__ == '__main__':
        parser = get_parser()
        args = parser.parse_args()
        name = args.name
        print('Hello {}'.format(name))

    在命令行执行如下命令: 

    $ python print_name.py --name Wang
    Hello Wang

    上面的代码段中,我们显示引入了argparse包,然后通过argparse.ArgumentParser函数生成argparse对象,其中这个函数的description函数表示在命令行显示帮助信息的时候,这个程序的描述信息。之后我们通过对象的add_argument函数来增加参数。这里我们只增加了一个--name的参数,然后后面的default参数表示如果没提供参数,我们默认采用的值。即如果像下面这样执行命令: 

    $ python print_name.py


    则输出是: 

    $ Hello Great


    最后我们通过argpaser对象的parser_args函数来获取所有参数args,然后通过args.name的方式得到我们设置的--name参数的值,可以看到这里argparse默认的参数名就是--name形式里面--后面的字符串。 

    整个流程就是这样,下面我们详细讲解add_argument函数的一些最常用的参数,使得你看完这个教程之后,能完成科研和工作中的大部分命令解析任务。

    2. default:没有设置值情况下的默认参数

    如同上例中展示的,default表示命令行没有设置该参数的时候,程序中用什么值来代替。

    3. required: 表示这个参数是否一定需要设置

    如果设置了required=True,则在实际运行的时候不设置该参数将报错:

    ...
    parser.add_argument('-name', required=True)
    ...

    则运行下面的命令会报错: 

    $ python print_name.py
    usage: print_name.py [-h] --name NAME
    print_name.py: error: argument --name is required

    4. type:参数类型 

    默认的参数类型是str类型,如果你的程序需要一个整数或者布尔型参数,你需要设置type=inttype=bool,下面是一个打印平方的例子:

    #name: square.py
    import argparse
    
    def get_parser():
        parser = argparse.ArgumentParser(
            description='Calculate square of a given number')
        parser.add_argument('-number', type=int)
    
        return parser
    
    
    if __name__ == '__main__':
        parser = get_parser()
        args = parser.parse_args()
        res = args.number ** 2
        print('square of {} is {}'.format(args.number, res))

    执行: 

    $ python square.py -number 5
    square of 5 is 25

    5. choices:参数值只能从几个选项里面选择 

    如下面的代码:

    # file-name: choices.py
    import argparse
    
    def get_parser():
        parser = argparse.ArgumentParser(
            description='choices demo')
        parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'])
    
        return parser
    
    if __name__ == '__main__':
        parser = get_parser()
        args = parser.parse_args()
        print('the arch of CNN is '.format(args.arch))

    如果像下面这样执行会报错: 

    $ python choices.py -arch resnet
    usage: choices.py [-h] -arch {alexnet,vgg}
    choices.py: error: argument -arch: invalid choice: 'resnet' (choose from 'alexnet', 'vgg')


    因为我们所给的-arch参数resnet不在备选的choices之中,所以会报错 

    6. help:指定参数的说明信息

    在现实帮助信息的时候,help参数的值可以给使用工具的人提供该参数是用来设置什么的说明,对于大型的项目,help参数和很有必要的,不然使用者不太明白每个参数的含义,增大了使用难度。
    下面是个例子:

    # file-name: help.py
    import argparse
    
    def get_parser():
        parser = argparse.ArgumentParser(
            description='help demo')
        parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'],
            help='the architecture of CNN, at this time we only support alexnet and vgg.')
    
        return parser
    
    
    if __name__ == '__main__':
        parser = get_parser()
        args = parser.parse_args()
        print('the arch of CNN is '.format(args.arch))

    在命令行加-h--help参数运行该命令,获取帮助信息的时候,结果如下: 

    $ python help.py -h
    usage: help.py [-h] -arch {alexnet,vgg}
    
    choices demo
    
    optional arguments:
      -h, --help           show this help message and exit
      -arch {alexnet,vgg}  the architecture of CNN, at this time we only support
                           alexnet and vgg.

    7. dest:设置参数在代码中的变量名 

    argparse默认的变量名是---后面的字符串,但是你也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值。

    8. nargs: 设置参数在使用可以提供的个数

    使用方式如下:

    parser.add_argument('-name', nargs=x)

    其中x的候选值和含义如下: 

    值  含义
    N   参数的绝对个数(例如:3'?'   0或1个参数
    '*'   0或所有参数
    '+'   所有,并且至少一个参数

    如下例子: 

    # file-name: nargs.py
    import argparse
    
    def get_parser():
        parser = argparse.ArgumentParser(
            description='nargs demo')
        parser.add_argument('-name', required=True, nargs='+')
    
        return parser
    
    
    if __name__ == '__main__':
        parser = get_parser()
        args = parser.parse_args()
        names = ', '.join(args.name)
        print('Hello to {}'.format(names))

    执行命令和结果如下: 

    $ python nargs.py -name A B C
    Hello to A, B, C
     

    参考链接:

    1. http://blog.xiayf.cn/2013/03/30/argparse/
    2. https://docs.python.org/3/library/argparse.html

    转自http://vra.github.io/2017/12/02/argparse-usage/

  • 相关阅读:
    Hibernate学习(2)- hibernate.cfg.xml详解
    Hibernate学习(1)- 初识
    linux(centos6) 常用操作
    linux(centos6) 下安装 postgresql-9.3.1.tar.gz
    struts2 值栈分析
    struts2 paramsPrepareParamsStack拦截器简化代码(源码分析)
    idea 配置maven
    idea 使用github
    idea 配置svn
    idea 配置tomcat
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/12202409.html
Copyright © 2011-2022 走看看