zoukankan      html  css  js  c++  java
  • python中的argparse

    argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。

    最基础的,从一个最简单的程序开始:

    1 import argparse
    2 parser = argparse.ArgumentParser()

    运行结果:

    1 $ python 1.py
    2 $ 

     

    定位参数:

     1 import argparse
     2 parser=argparse.ArgumentParser()
     3 
     4 
     5 parser.add_argument("echo")
     6 parser.add_argument("hello")
     7 
     8 args = parser.parse_args()
     9 
    10 print args.ehco

    运行:

     1 $python 1.py
     2 usage: 1.py [-h] echo hello
     3 1.py: error: too few arguments
     4 
     5 $python 1.py echo
     6 usage: 1.py [-h] echo hello
     7 1.py: error: too few arguments
     8 
     9 
    10 $python 1.py echo hello
    11 echo

     方法add_argument(),用来指定程序需要接受的命令参数;

    并且argparse是默认字符串,如果以数字形式输入会报错,如下面代码所示:

    1 import argparse
    2 parser=argparse.ArgumentParser()
    3 parser.add_argument("echo", help="echo the string you use here")
    4 args=parser.parse_args()
    5 print args.echo*10

    运行:

    $ python 1.py 4
    Traceback (most recent call last):
      File "1.py", line 5, in <module>
        print args.square**2
    TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

    必须将代码增加type=你需要的类型(像这里需要int类型):

    1 import argparse
    2 parser=argparse.ArgumentParser()
    3 parser.add_argument("echo", help="echo the string you use here", type=int)
    4 args=parser.parse_args()
    5 print args.echo*10

    --help:

    虽然现在帮助信息已经很美观了,但是还不够好。例如我们知道echo是个定位参数,但是却不知道该参数的意思,只能通过猜或者读源码。下面,我们可以让它更有帮助:

    1 import argparse
    2 parser = argparse.ArgumentParser()
    3 parser.add_argument("echo", help="echo the string you use there")
    4 args = parser.parser_args()
    5 print args.echo

     运行:

    1 $ python 1.py -h
    2 usage: 1.py [-h] echo
    3 
    4 positional arguments:
    5   echo        echo the string you use here
    6 
    7 optional arguments:
    8   -h, --help  show this help message and exit

    参考类型:

    一般来说,如果不指定参数类型的话,argparse默认为字符串类型,可以通过type来指定;

    1 import argparse
    2 parser = argparse.ArgumentParser()
    3 parser.add_argument("square", help="display a square of a given number", type=int)
    4 args = parser.parse_args()
    5 print args.square**2

     还可以使用default=xx来指定默认参数的值,例如:

    1 parser.add_argument("echo", action="count", default=0)

    可选参数:

    1 import argparse
    2 parser = argparse.ArgumentParser()
    3 parser.add_argument("--verbosity", help="increase output verbosity")
    4 args = parser.parse_args()
    5 if args.verbosity:
    6     print "verbosity turned on"

    运行:

    $ python 1.py --verbosity 1
    verbosity turned on
    $ python 1.py
    $ python 1.py --help
    usage: prog.py [-h] [--verbosity VERBOSITY]

    关于可选参数还有一个简写

    1 import argparse
    2 parser = argparse.ArgumentParser()
    3 parser.add_argument("-vwww", "--verbose", help="increase output verbosity", action="store_true")
    4 args = parser.parse_args()
    5 if args.verbose:
    6     print "verbosity turned on"

    这里的-vww就是其简写,action: store_true / store_false:布尔开关。 store_true.默认为False,输入则为true。 store_flase 相反;

    1 $ python prog.py -v
    2 verbosity turned on
    3 $ python prog.py --help
    4 usage: prog.py [-h] [-v]
    5 
    6 optional arguments:
    7   -h, --help     show this help message and exit
    8   -v, --verbose  increase output verbosity

    在命令行中只要-v和-vwww前面一致就行,如果是-vp就会报错;如果是-vw,默认是-vwww,也个23是正确的;

     注意:

    1 parser.add_argument("-v", "--verbose", action="store_true",help="increase output verbosity")

     这些是没有顺序的,当然也可以像上面一样了;

    参数冲突:

    迄今为止,我们已经使用到了[argparse.ArgumentParser][6]的两个方法,来看看他的另一个方法add_mutually_exclusive_group()。它可以让我们指定某个参数和其他参数冲突。下面来修改下程序以对这个新方法有更多的了解:我们将加入参数--quiet,它和参数--verbose冲突,不能同时指定:

     1 import argparse
     2 parser = argparse.ArgumentParser()
     3 parser.add_argument("-v", "--verbose", type=int, help="the base")
     4 parser.add_argument("-q", "--quiet", type=int, help="the exponent")
     5 
     6 args = parser.parse_args()
     7 if args.quiet:
     8     print "111111"
     9 elif args.verbose:
    10     print "222222"

    运行:

    1 $python 1.py -v -q
    2 $11111

     另一个方法add_mutually_exclusive_group():

    1 import argparse
    2 
    3 parser = argparse.ArgumentParser()
    4 group = parser.add_mutually_exclusive_group()
    5 group.add_argument("-v", "--verbose", action="store_true")
    6 group.add_argument("-q", "--quiet", action="store_true") 
    7 if args.quiet:
    8     print "111111"
    9 elif args.verbose:
    10     print "222222"

    运行:

    1 python 1.py -v -q
    2 usage: 1.py [-h] [-v | -q]
    3 test.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

    表明了可以使用-v或者-q,但是不能同时使用。

  • 相关阅读:
    最全的CSS浏览器兼容问题整理
    游戏设计源概念——学习
    如何将数据从 Excel 导入到 SQL Server
    IE8网页显示不正常 用”兼容性视图”搞定
    Lua概念定义及相关资料
    谈谈主策划需要的能力
    微博营销实战经验总结
    创业公司CEO每天应该做的13件事
    2011营销往哪一个风向吹
    [转]网店博客营销之微博实战技巧:还没有做微博的掌柜看过来
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/6095283.html
Copyright © 2011-2022 走看看