argparse

就像linux 后面的参数一样。
argparse模块可以轻松编写用户友好的命令行界面。该程序定义了它需要的参数,argparse 并将弄清楚如何解析它们sys.argvargparse 当用户给程序提供无效参数时,该模块还会自动生成帮助和使用消息并发出错误

示例

以下代码是一个Python程序,它获取整数列表并生成总和或最大值:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

假设上面的Python代码保存在一个名为的文件中prog.py,它可以在命令行运行并提供有用的帮助消息:

$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:
 N           an integer for the accumulator

optional arguments:
 -h, --help  show this help message and exit
 --sum       sum the integers (default: find the max)

使用适当的参数运行时,它会输出命令行整数的总和或最大值:

$ python prog.py 1 2 3 4
4

$ python prog.py 1 2 3 4 --sum
10

如果传入无效参数,则会发出错误:

$ python prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'

以下部分将引导您完成此示例。
1.创建解析器创建一个ArgumentParser对象

>>> parser = argparse.ArgumentParser(description='Process some integers.')

2.添加参数
使用add_argument()方法填充有关程序参数的信息。parse_args()调用时会存储和使用此信息

>>> parser.add_argument('integers', metavar='N', type=int, nargs='+',
...                     help='an integer for the accumulator')
>>> parser.add_argument('--sum', dest='accumulate', action='store_const',
...                     const=sum, default=max,
...                     help='sum the integers (default: find the max)')

稍后,调用parse_args()将返回具有两个属性的对象,integers并且accumulate。该integers属性将是一个或多个整数的列表,该accumulate属性将是sum()函数(如果--sum在命令行中指定)或max()函数(如果不是)。
3.解析参数
ArgumentParser通过该parse_args()方法解析参数 。这将检查命令行,将每个参数转换为适当的类型,然后调用相应的操作。在大多数情况下,这意味着Namespace将从命令行解析的属性构建一个简单的对象:

>>> parser.parse_args(['--sum', '7', '-1', '42'])
Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])

ArgumentParser对象

class argparse.ArgumentParser(prog = None,usage = None,description = None,epilog = None,parents = [],formatter_class = argparse.HelpFormatter,prefix_chars =' - ',fromfile_prefix_chars = None,argument_default = None,conflict_handler ='error',add_help = True,allow_abbrev = True )

创建一个新ArgumentParser对象。所有参数都应作为关键字参数传递。每个参数在下面都有自己更详细的描述,但简而言之,它们是:

  • PROG -程序的名称(默认:sys.argv[0]
  • usage - 描述程序用法的字符串(默认值:从添加到解析器的参数生成)
  • description - 参数help之前显示的文本(默认值:none)
  • epilog - 参数help后显示的文本(默认值:none)
  • parents - ArgumentParser还应包含其参数的对象列表
  • formatter_class - 用于自定义帮助输出的类
  • prefix_chars - 前缀可选参数的字符集(默认值:' - ')
  • fromfile_prefix_chars -该组文件前缀字符从额外的参数应该读(默认值:None
  • argument_default -为参数的全局默认值(默认值:None
  • conflict_handler - 解决冲突选项的策略(通常是不必要的)
  • add_help -添加-h/--help选项解析器(默认值:True
  • allow_abbrev - 如果缩写是明确的,则允许缩写长选项。(默认值:True

在版本3.5中更改:添加了allow_abbrev参数。

add_argument()方法

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
定义应如何解析单个命令行参数。每个参数在下面都有自己更详细的描述,但简而言之,它们是:

  • name or flags - 选项字符串的名称或列表,例如foo 或。-f, --foo
  • action - 在命令行遇到此参数时要采取的基本操作类型。
  • nargs - 应该使用的命令行参数的数量。
  • const - 某些操作nargs选择所需的常量值。
  • default - 如果命令行中不存在参数,则生成的值。
  • type - 应转换命令行参数的类型。
  • choices - 参数允许值的容器。
  • required - 是否可以省略命令行选项(仅限选项)。
  • help - 对参数的作用的简要说明。
  • metavar - 用法消息中参数的名称。
  • dest - 要添加到返回的对象的属性的名称 parse_args()

name of flags

add_argument()方法必须知道是否需要可选参数,如-f--foo,或位置参数,如文件名列表。add_argument()因此,传递给的第一个参数 必须是一系列标志或简单的参数名称。例如,可以创建一个可选参数,如:

>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')

parse_args()被调用时,可选的参数将被识别-的前缀,而其余的参数将被认为是位置:
可选参数就是可以输入也可以不输入,位置参数表示必须有的参数

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')
>>> parser.parse_args(['BAR'])
Namespace(bar='BAR', foo=None)
>>> parser.parse_args(['BAR', '--foo', 'FOO'])
Namespace(bar='BAR', foo='FOO')
>>> parser.parse_args(['--foo', 'FOO'])
usage: PROG [-h] [-f FOO] bar
PROG: error: the following arguments are required: bar

default

可以在命令行中省略所有可选参数和一些位置参数。值默认为的default关键字参数 指定在命令行参数不存在时应使用的值。对于可选参数,在命令行中不存在选项字符串时使用该值:add_argument()None``default

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', default=42)
>>> parser.parse_args(['--foo', '2'])
Namespace(foo='2')
>>> parser.parse_args([])
Namespace(foo=42)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容