上一节我们学习了parse_args()的用法,这一节,我们将继续学习argparse的其他一些用法。
        1.sub-commands子命令
        argparser支持类似svn的子命令,通过add_subparsers()可以实现,这个方法不需要任何参数,并返回一个特殊的action对象,这个对象有一个方法-add_parser,它接收一个命令名和任意ArgumentParser构造函数参数,并返回一个ArgumentParser对象。
>>> # create the top-level parser
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--foo', action='store_true', help='foo help')
>>> subparsers = parser.add_subparsers(help='sub-command help')
>>>
>>> # create the parser for the "a" command
>>> parser_a = subparsers.add_parser('a', help='a help')
>>> parser_a.add_argument('bar', type=int, help='bar help')
>>>
>>> # create the parser for the "b" command
>>> parser_b = subparsers.add_parser('b', help='b help')
>>> parser_b.add_argument('--baz', choices='XYZ', help='baz help')
>>>
>>> # parse some arg lists
>>> parser.parse_args(['a', ''])
Namespace(bar=12, foo=False)
>>> parser.parse_args(['--foo', 'b', '--baz', 'Z'])
Namespace(baz='Z', foo=True)
        注意,parse_args()只会返回主parser中指定的参数。>>> parser.parse_args(['--help'])
>>> parser.parse_args(['--help'])
usage: PROG [-h] [--foo] {a,b} ... positional arguments:
{a,b} sub-command help
a a help
b b help optional arguments:
-h, --help show this help message and exit
--foo foo help >>> parser.parse_args(['a', '--help'])
usage: PROG a [-h] bar positional arguments:
bar bar help optional arguments:
-h, --help show this help message and exit >>> parser.parse_args(['b', '--help'])
usage: PROG b [-h] [--baz {X,Y,Z}] optional arguments:
-h, --help show this help message and exit
--baz {X,Y,Z} baz help
        add_subparsers()也支持title和description参数。
>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers(title='subcommands',
... description='valid subcommands',
... help='additional help')
>>> subparsers.add_parser('foo')
>>> subparsers.add_parser('bar')
>>> parser.parse_args(['-h'])
usage: [-h] {foo,bar} ... optional arguments:
-h, --help show this help message and exit subcommands:
valid subcommands {foo,bar} additional help
        另外一种有效处理子命令的方法是将add_subparsers()与set_defaults()绑定起来。
>>> # sub-command functions
>>> def foo(args):
... print args.x * args.y
...
>>> def bar(args):
... print '((%s))' % args.z
...
>>> # create the top-level parser
>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers()
>>>
>>> # create the parser for the "foo" command
>>> parser_foo = subparsers.add_parser('foo')
>>> parser_foo.add_argument('-x', type=int, default=1)
>>> parser_foo.add_argument('y', type=float)
>>> parser_foo.set_defaults(func=foo)
>>>
>>> # create the parser for the "bar" command
>>> parser_bar = subparsers.add_parser('bar')
>>> parser_bar.add_argument('z')
>>> parser_bar.set_defaults(func=bar)
>>>
>>> # parse the args and call whatever function was selected
>>> args = parser.parse_args('foo 1 -x 2'.split())
>>> args.func(args)
2.0
>>>
>>> # parse the args and call whatever function was selected
>>> args = parser.parse_args('bar XYZYX'.split())
>>> args.func(args)
((XYZYX))
        通过这种方式,你可以在解析完参数之后,调用指定的函数,但是必须检查子命令的名字。
>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers(dest='subparser_name')
>>> subparser1 = subparsers.add_parser('')
>>> subparser1.add_argument('-x')
>>> subparser2 = subparsers.add_parser('')
>>> subparser2.add_argument('y')
>>> parser.parse_args(['', 'frobble'])
Namespace(subparser_name='', y='frobble')
        2.FileType对象
        FileType类工厂可以创建一个文件类型对象并传递给add_argument()方法。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--output', type=argparse.FileType('wb', 0))
>>> parser.parse_args(['--output', 'out'])
Namespace(output=<open file 'out', mode 'wb' at 0x...>)
         文件类型对象能够识别-,并自动将其转换为sys.stdin或者sys.stdout
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('infile', type=argparse.FileType('r'))
>>> parser.parse_args(['-'])
Namespace(infile=<open file '<stdin>', mode 'r' at 0x...>)
        3.参数组
       默认情况下,ArgumentParser将命令行参数按位置参数和可选包参数进行分组,并显示在帮助信息中,通过指定add_argument_group()参数开可以自定义分组。
>>> parser = argparse.ArgumentParser(prog='PROG', add_help=False)
>>> group = parser.add_argument_group('group')
>>> group.add_argument('--foo', help='foo help')
>>> group.add_argument('bar', help='bar help')
>>> parser.print_help()
usage: PROG [--foo FOO] bar group:
bar bar help
--foo FOO foo help
        add_argument_group()对象返回一个类似ArgumentParser的参数组对象,这个对象有一个方法add_argument(),不同的参数组可以在帮助信息中显示不同的分组信息。
>>> parser = argparse.ArgumentParser(prog='PROG', add_help=False)
>>> group1 = parser.add_argument_group('group1', 'group1 description')
>>> group1.add_argument('foo', help='foo help')
>>> group2 = parser.add_argument_group('group2', 'group2 description')
>>> group2.add_argument('--bar', help='bar help')
>>> parser.print_help()
usage: PROG [--bar BAR] foo group1:
group1 description foo foo help group2:
group2 description --bar BAR bar help
        4.互斥
       使用argparse.add_mutually_exclusive_group()创建一个互斥的参数组,这意味着同时只能指定其中的一个参数。
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> group = parser.add_mutually_exclusive_group()
>>> group.add_argument('--foo', action='store_true')
>>> group.add_argument('--bar', action='store_false')
>>> parser.parse_args(['--foo'])
Namespace(bar=True, foo=True)
>>> parser.parse_args(['--bar'])
Namespace(bar=False, foo=False)
>>> parser.parse_args(['--foo', '--bar'])
usage: PROG [-h] [--foo | --bar]
PROG: error: argument --bar: not allowed with argument --foo
        这个方法也可以指定requred值,表示必须提供一个参数。
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> group = parser.add_mutually_exclusive_group(required=True)
>>> group.add_argument('--foo', action='store_true')
>>> group.add_argument('--bar', action='store_false')
>>> parser.parse_args([])
usage: PROG [-h] (--foo | --bar)
PROG: error: one of the arguments --foo --bar is required
        5.解析默认参数
        大多数情况下,parse_args返回的属性由命令行参数决定,但有时候可以通过set_defaults()来提供参数给parse_args()。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('foo', type=int)
>>> parser.set_defaults(bar=42, baz='badger')
>>> parser.parse_args([''])
Namespace(bar=42, baz='badger', foo=736)
        注意默认值通常会覆盖掉命令行提供的参数值
>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--foo', default='bar')

>>> parser.set_defaults(foo='spam')

>>> parser.parse_args([])

Namespace(foo='spam')
        可以通过get_default()方法获取默认值。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', default='badger')
>>> parser.get_default('foo')
'badger'
        6.打印帮助信息
        大多数情况下,parse_args()会处理帮助信息的组织和打印。但是也可以使用以下方法。
  • ArgumentParser.print_usage([file]):打印用法示例
  • ArgumentParser.print_help([file]): 打印帮助信息
  • ArgumentParser.format_usage(): 格式化用法示例信息
  • ArgumentParser.format_help():格式化帮助信息
        7.部分解析
        使用parse_known_args()完成部分解析,结果返回一个命名空间和一个还未解析的字符串列表
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('bar')
>>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam'])
(Namespace(bar='BAR', foo=True), ['--badger', 'spam'])
        8.自定义文件解析
       从文件中获取参数时,默认是每行一个参数,可以重写convert_arg_line_to_args()实现自定义读取参数。例如
def convert_arg_line_to_args(self, arg_line):
for arg in arg_line.split():
if not arg.strip():
continue
yield arg

python命令行解析工具argparse模块【5】的更多相关文章

  1. python命令行解析工具argparse模块【1】

    argpaser是python中很好用的一个命令行解析模块,使用它我们可以很方便的创建用户友好型命令行程序.而且argparse会自动生成帮助信息和错误信息. 一.示例 例如下面的例子,从命令行中获取 ...

  2. python命令行解析工具argparse模块【3】

    上一节,我们讲解了ArgumentParser对象,这一节我们将学习这个对象的add_argument()方法.         add_argument()方法的定义了如何解析一个命令行参数,每个参 ...

  3. python命令行解析工具argparse模块【2】

    上一节,我们简要的介绍了argparse的用法,接下来几节,将详细讲解其中的参数及用法,这一节我们讲解ArgumentParser对象. argparse.ArgumentParser([descri ...

  4. python命令行解析工具argparse模块【4】

            上一节我们讲解了add_argument()方法,这一节我们将学习parse_args()方法.          parse_args()方法的作用是解析命令行参数,并返回解析之后的 ...

  5. Python 命令行解析工具 Argparse介绍

    最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具. 以前老是做UI程序,今天试了下命令行程序,感觉相当好,不用再花大把时间去研究界面问题 ...

  6. python之命令行解析工具argparse

    以前写python的时候都会自己在文件开头写一个usgae函数,用来加上各种注释,给用这个脚本的人提供帮助文档. 今天才知道原来python已经有一个自带的命令行解析工具argparse,用了一下,效 ...

  7. Python命令行解析库argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 1.example 有一道面试题:编写一个脚本main.py,使用方式如下: ...

  8. Python命令行解析库argparse(转)

    原文:http://www.cnblogs.com/linxiyue/p/3908623.html 2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse ...

  9. 【python】命令行解析工具argparse用法

    python的命令行参数 之前有用到optget, optparse, 现在这些都被弃用了. import argparse parser = argparse.ArgumentParser() ar ...

随机推荐

  1. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap good

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  2. mysql null值问题

    mysql> create table test( sn int, -> `createdTime` datetime NOT NULL COMMENT '创建时间', -> `up ...

  3. linux杂谈(十七):iscsi存储分离技术

    1.iscsi简单介绍 ​ ​iSCSI利用了TCP/IP的port 860 和 3260 作为沟通的渠道.透过两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机能够透过快速的局域网集线来 ...

  4. Android 调用相册 拍照 实现系统控件缩放 切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...

  5. HDU1046:Gridland

    Problem Description For years, computer scientists have been trying to find efficient solutions to d ...

  6. javascript的函数相关属性和方法

    作为一名前端初学者,应该坚持每天去学习,去总结 ,去复习,去接触更新鲜的事物.但是这段时间很浮躁,虽说也是在一直学习,自己能吸收的少之又少.今日在这突然冒出来,实感惭愧. 1.函数名.name 获得函 ...

  7. mysql 更改自动增长列的初始值

    alter table t_Myxiao7 AUTO_INCREMENT 3;   -- 从三开始 ITOKIT.COM提示:如果表中数据没有用.如果直接删除数据,自动增长ID还是不会从1开始的,可以 ...

  8. 利用Apperance协议定义View的全局外观

    假设要定义一个全局的bkColor用于背景颜色 1.@property(nonatomic,strong)UIColor *bkColor UI_APPEARANCE_SELECTOR; 2.在下面方 ...

  9. error C2018: unknown character '0xa1'

    调试程序时出现 error C2018: unknown character '0xa1',代码行中加入的有编译器不能识别的字符,才发现由空格引起的,删除掉就ok了.

  10. BZOJ 1316: 树上的询问( 点分治 + 平衡树 )

    直接点分治, 用平衡树(set就行了...)维护. -------------------------------------------------------------------------- ...