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

  argparse.ArgumentParser([description][, epilog][, prog][, usage][, add_help][, argument_default][, parents][, prefix_chars][,conflict_handler][, formatter_class])

  创建一个ArgumentParser对象。每个参数都有其特殊含义,简单的介绍如下:

    • description:help参数之前显示的信息

    • epilog:help参数之后显示的信息。

    • add_help:给解析器添加-h/--help选项(默认为True)

    • argument_default:设置参数的默认值(默认为None)

    • parents:ArgumentParser对象组成列表,这些对象中的参数也要包含进来。

    • prefix_chars:可选参数之前的前缀(默认为-)

    • fromfile_prefix_chars:如果是从文件中读取参数,这个文件名参数的前缀(默认为None)

    • formatter_class:一个自定义帮助信息格式化输出的类

    • conflict_handler:通常不需要,定义了处理冲突选项的策略

    • prog:程序名(默认为sys.argv[0])

    • usage:程序的使用用例,默认情况下会自动生成。

    1.description

  大多数调用ArgumentParser构造函数的例子中都会使用description参数,这个参数会简短的描述这个程序的用途。

>>> parser = argparse.ArgumentParser(description='A foo that bars')
>>> parser.print_help()
usage: argparse.py [-h] A foo that bars optional arguments:
-h, --help show this help message and exit
   默认情况下,这个描述信息前后都会有一个空行,如果想改变这种显示,可以使用formatter_class参数

      2.epilog

      有些程序可能想在描述信息之后再继续展示别的信息,这个时候可以使用epilog参数设置。

>>> parser = argparse.ArgumentParser(
... description='A foo that bars',
... epilog="And that's how you'd foo a bar")
>>> parser.print_help()
usage: argparse.py [-h] A foo that bars optional arguments:
-h, --help show this help message and exit And that's how you'd foo a bar

   跟description参数一样,这个信心前后都有一个空行,同样可以通过formatter-class参数设置。

  3.add_help

   默认情况下,ArgumentParser对象对自动添加-h/--help选项,以展示帮助信息。例如,myprogam.py代码如下所示:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help')
args = parser.parse_args()

    如果命令行支持-h/--help参数,则下面的代码输出如下:

$ python myprogram.py --help
usage: myprogram.py [-h] [--foo FOO] optional arguments:
-h, --help show this help message and exit
--foo FOO foo help

  通过设置add_help=False可以取消帮助信息的显示

>>> parser = argparse.ArgumentParser(prog='PROG', add_help=False)
>>> parser.add_argument('--foo', help='foo help')
>>> parser.print_help()
usage: PROG [--foo FOO] optional arguments:
--foo FOO foo help

   4.prefix_chars

  大多数命令行参数使用-作为前缀,但是可以使用prefix_char=argument来自定义前缀。

>>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')
>>> parser.add_argument('+f')
>>> parser.add_argument('++bar')
>>> parser.parse_args('+f X ++bar Y'.split())
Namespace(bar='Y', f='X')

    5.fromfile_prefix_chars

  有时候需要从文件中获取参数,如果参数过多的话。这时,如果设置了fromfile_prefix_chars参数的话,解析器会将带有这个设定前缀的参数作为文件处理。

>>> with open('args.txt', 'w') as fp:
... fp.write('-f\nbar')
>>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
>>> parser.add_argument('-f')
>>> parser.parse_args(['-f', 'foo', '@args.txt'])
Namespace(f='bar')

  文件中必须是每行对应一个参数。

   6.argument_default

   设置参数的默认值。

>>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS)
>>> parser.add_argument('--foo')
>>> parser.add_argument('bar', nargs='?')
>>> parser.parse_args(['--foo', '', 'BAR'])
Namespace(bar='BAR', foo='')
>>> parser.parse_args([])
Namespace()

    7.parents

      有时候,几个解析器共享一个参数集合,可以将这个共享参数集合传递给parent,解析器对象会将这些共享参数包含在内。

>>> parent_parser = argparse.ArgumentParser(add_help=False)
>>> parent_parser.add_argument('--parent', type=int) >>> foo_parser = argparse.ArgumentParser(parents=[parent_parser])
>>> foo_parser.add_argument('foo')
>>> foo_parser.parse_args(['--parent', '', 'XXX'])
Namespace(foo='XXX', parent=2) >>> bar_parser = argparse.ArgumentParser(parents=[parent_parser])
>>> bar_parser.add_argument('--bar')
>>> bar_parser.parse_args(['--bar', 'YYY'])
Namespace(bar='YYY', parent=None)

  注意大多数情况下,父解析器会将add_help设置为False,否则将会出现两个-h/--help选项,从而导致错误。

     8.formatter_class

    通过指定formatter_class可以对帮助信息进行格式化输出。这样的类有三个:argparse.RawDescriptionHelpFormatter, argparse.RawTextHelpFormatter 以及argparse.ArgumentDefaultsHelp

   默认情况下,description以及epilog信息前后都有一个空行。

>>> parser = argparse.ArgumentParser(
... prog='PROG',
... description='''this description
... was indented weird
... but that is okay''',
... epilog='''
... likewise for this epilog whose whitespace will
... be cleaned up and whose words will be wrapped
... across a couple lines''')
>>> parser.print_help()
usage: PROG [-h] this description was indented weird but that is okay optional arguments:
-h, --help show this help message and exit likewise for this epilog whose whitespace will be cleaned up and whose words
will be wrapped across a couple lines

     如果将formatter_class参数设置为argparse.RawDescriptionHelpFormatter,则description和epilog将会按原样输出。

>>> parser = argparse.ArgumentParser(
... prog='PROG',
... formatter_class=argparse.RawDescriptionHelpFormatter,
... description=textwrap.dedent('''\
... Please do not mess up this text!
... --------------------------------
... I have indented it
... exactly the way
... I want it
... '''))
>>> parser.print_help()
usage: PROG [-h] Please do not mess up this text!
--------------------------------
I have indented it
exactly the way
I want it optional arguments:
-h, --help show this help message and exit

     RawTextHelpFormatter则会保留预定义的帮助信息中的空格。

     另外一个类ArgumentDefaultsHelpFormatter则会给所有的有默认值的参数添加默认值信息。

>>> parser = argparse.ArgumentParser(
... prog='PROG',
... formatter_class=argparse.ArgumentDefaultsHelpFormatter)
>>> parser.add_argument('--foo', type=int, default=42, help='FOO!')
>>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!')
>>> parser.print_help()
usage: PROG [-h] [--foo FOO] [bar [bar ...]] positional arguments:
bar BAR! (default: [1, 2, 3]) optional arguments:
-h, --help show this help message and exit
--foo FOO FOO! (default: 42)

      9.conflict_handler

    ArgumentParser对象不允许传入两个相同的参数,否则会报错。

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-f', '--foo', help='old foo help')
>>> parser.add_argument('--foo', help='new foo help')
Traceback (most recent call last):
..
ArgumentError: argument --foo: conflicting option string(s): --foo

    通过设置conflict_handler为resolve,可以用新的参数覆盖旧的同名参数。

>>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve')
>>> parser.add_argument('-f', '--foo', help='old foo help')
>>> parser.add_argument('--foo', help='new foo help')
>>> parser.print_help()
usage: PROG [-h] [-f FOO] [--foo FOO] optional arguments:
-h, --help show this help message and exit
-f FOO old foo help
--foo FOO new foo help

      10.prog

      默认情况下,ArgumentParser对象使用sys.argv[0]来获取程序名。大多数情况下下,默认值就足够了,例如:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help')
args = parser.parse_args()
    这种情况,帮助信息会如下所示:

$ python myprogram.py --help
usage: myprogram.py [-h] [--foo FOO] optional arguments:
-h, --help show this help message and exit
--foo FOO foo help
$ cd ..
$ python subdir\myprogram.py --help
usage: myprogram.py [-h] [--foo FOO] optional arguments:
-h, --help show this help message and exit
--foo FOO foo help

  如果想改变这个默认值,可以设置prog。

>>> parser = argparse.ArgumentParser(prog='myprogram')
>>> parser.print_help()
usage: myprogram [-h] optional arguments:
-h, --help show this help message and exit

   11.usage

     默认情况下,ArgumentParser对象会自动计算出程勋的用法示例

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--foo', nargs='?', help='foo help')
>>> parser.add_argument('bar', nargs='+', help='bar help')
>>> parser.print_help()
usage: PROG [-h] [--foo [FOO]] bar [bar ...] positional arguments:
bar bar help optional arguments:
-h, --help show this help message and exit
--foo [FOO] foo help

这个默认的信息可以通过设置usage来覆盖。

>>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]')
>>> parser.add_argument('--foo', nargs='?', help='foo help')
>>> parser.add_argument('bar', nargs='+', help='bar help')
>>> parser.print_help()
usage: PROG [options] positional arguments:
bar bar help optional arguments:
-h, --help show this help message and exit
--foo [FOO] foo help
 
 

 
 
    
 
 

 

 

 
    
 
    
 
    
    
 
 
    

 
    
    
    

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

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

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

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

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

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

            上一节我们学习了parse_args()的用法,这一节,我们将继续学习argparse的其他一些用法.         1.sub-commands子命令         argpar ...

  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. Changing the Auto-Logout Timeout in SSH

    SSH: We can set a timeout interval for ssh client who are idle or in inactive state. As soon as the ...

  2. java ssh

    sshj (currently best choice) https://github.com/shikhar/sshj ssh used in jenkins-ci https://github.c ...

  3. 如何注册成为uber司机 快速成为优步司机网上注册流程攻略 2015最新

    [目前开通Uber的城市]:北京.上海.天津.广州.成都.深圳.杭州.重庆.武汉.青岛.南京.苏州.长沙.宁波.西安.佛山等.济南,烟台和厦门正在秘密的招第一批司机. [车辆要求]:要求裸车价8万以上 ...

  4. WebKit的历史项管理

    标准定义 关于历史的管理,和HTML页面载入一样,都有其相应的标准.地址例如以下: WhatWG: https://html.spec.whatwg.org/multipage/browsers.ht ...

  5. c# 遍历文件夹及其所有文件

    利用VS创建一个winform应用程序,遍历指定文件夹(photos)内的所有文件夹及其文件.具体程序如下: namespace 遍历文件夹及其所有文件 { public partial class ...

  6. iOS 10 创建iMessage App

    原文作者 澳大利亚19岁少年--Davis Allie ----原文地址 时值中秋佳节, 送给出门在外的程序猿们 ! 骚年们, 自己写个表情包斗图可否 ! 斗-seal.svg.png 第一. 介绍 ...

  7. 下 面 这 条 语 句 一 共 创 建 了 多 少 个 对 象 : String s="a"+"b"+"c"+"d";

    javac 编译可以对字符串常量直接相加的表达式进行优化, 不必要等到运行期去进行加法运算处理, 而是在编译时去掉其中的加号, 直接将其编译成一个这些常量相连的结果.题目中的第一行代码被编译器在编译时 ...

  8. BZOJ 1208: [HNOI2004]宠物收养所(BST)

    本来想先用set写一遍,再自己写个splay或treap,不过用set过了之后就懒得去写了....以后有空再来写吧..(不会有空的吧= = ------------------------------ ...

  9. Codeforces 116C - Party(dfs)

    n个人,每个人之多有一个上司.“上司”关系具有传递性.求最少将人分成多少组,每组中的每个人的上司或者间接上司都不在该组.拿到题就用树的直径wa了一炮... 正解是有向无环森林的最长路.从每个跟节点df ...

  10. python自定义排序函数

    Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted() ...