Python--argparse 模块

一、简介

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

二、使用步骤

1:import argparse

2:parser = argparse.ArgumentParser()

3:parser.add_argument()

4:parser.parse_args()

解释:
首先导入该模块;
然后创建一个解析对象;
然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项;
最后调用parse_args()方法进行解析;
解析成功之后即可使用。

三、创建解析器对象ArgumentParser

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)

prog:程序的名字,默认为sys.argv[0],用来在help信息中描述程序的名称。
usage:描述程序用途的字符串
description:help信息前的文字。
epilog:help信息之后的信息

import argparse
parse = argparse.ArgumentParser(prog = 'argparseDemo',prefix_chars= '+',description='the message info before help info',
epilog="the message info after help info")
parse.print_help()

输出

$ python argparseDemo.py 
usage: argparseDemo [+h]

the message info before help info

optional arguments:
  +h, ++help  show this help message and exit

the message info after help info

add_help:设为False时,help信息里面不再显示-h --help信息。
prefix_chars:参数前缀,默认为'-'

import argparse
parse = argparse.ArgumentParser(prog = 'argparseDemo',prefix_chars= '+')
parse.add_argument('+f')
parse.add_argument('++bar')
print parse.parse_args()

输出

 $python argparseDemo.py ++bar 123 +f 123
Namespace(bar='123', f='123')

fromfile_prefix_chars:前缀字符,放在文件名之前
argument_default:参数的全局默认值。
conflict_handler:对冲突的处理方式,默认为返回错误“error”。还有“resolve”,智能解决冲突。当用户给程序添加了两个一样的命令参数时,“error”就直接报错,提醒用户。而“resolve”则会去掉第一次出现的命令参数重复的部分或者全部(可能是短命令冲突或者全都冲突)。

import argparse
parse = argparse.ArgumentParser(prog = 'argparseDemo')
parse.add_argument('-f', '--foo', help='old foo help')
parse.add_argument('--foo', help='new foo help')
parse.print_help()

输出

argparse.ArgumentError: argument -f/--foo: conflicting option string(s): --foo

添加conflict_handler策略后

parse = argparse.ArgumentParser(prog = 'argparseDemo',conflict_handler = 'resolve')

输出

usage: argparseDemo [-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

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

add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

name or flags:参数有两种,可选参数和位置参数。parse_args()运行时,会用'-'来认证可选参数,剩下的即为位置参数。定位参数必选,可选参数可选。
添加可选参数:

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

添加位置参数:

 parser.add_argument('bar')

import argparse
parse = argparse.ArgumentParser()
parse.add_argument('-f', '--foo')
parse.add_argument('bar')
parse.parse_args(['baffr'])

输出,可见缺少位置参数'bar'时候,程序报错

Namespace(bar='baffr', foo=None)
>>> parse.parse_args(['123','-f','56'])
Namespace(bar='123', foo='56')
>>> parse.parse_args(['-f','56'])
usage: [-h] [-f FOO] bar
: error: too few arguments
shiqqdeMacBook-Pro:Python Demo sqq$ 

action:参数动作
argparse内置6种动作可以在解析到一个参数时进行触发:
store 保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。
store_const 保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。

>>> import argparse
>>> parse = argparse.ArgumentParser()
>>> parse.add_argument('--foo', action='store_const', const=42)
_StoreConstAction(option_strings=['--foo'], dest='foo', nargs=0, const=42, default=None, type=None, choices=None, help=None, metavar=None)
>>> parse.parse_args('--foo'.split())
Namespace(foo=42)

store_ture/store_false 保存相应的布尔值。这两个动作被用于实现布尔开关。

>>> import argparse
>>> parse = argparse.ArgumentParser()
>>> parse.add_argument('-b',action = 'store_true')
_StoreTrueAction(option_strings=['-b'], dest='b', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parse.add_argument('-c',action = 'store_false')
_StoreFalseAction(option_strings=['-c'], dest='c', nargs=0, const=False, default=True, type=None, choices=None, help=None, metavar=None)
>>> parse.parse_args('-b -c'.split())
Namespace(b=True, c=False)

append 将值保存到一个列表中。若参数重复出现,则保存多个值。

>>> import argparse
>>> parse = argparse.ArgumentParser()
>>> parse.add_argument('-b',action = 'append')
_AppendAction(option_strings=['-b'], dest='b', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parse.parse_args('-b  100 -b 200'.split())
Namespace(b=['100', '200'])
>>> 

插入:split()函数 ''-b 100 -b 200''.split() 返回为(['-b','100' ,'-b', '200']

append_const 将一个定义在参数规格中的值保存到一个列表中。
version 打印关于程序的版本信息,然后退出

>>> import argparse
>>> parse = argparse.ArgumentParser(prog = 'the demo ')
>>> parse.add_argument('--version',action = 'version',version = '%(prog)s2.0')
_VersionAction(option_strings=['--version'], dest='version', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help="show program's version number and exit", metavar=None)
>>> parse.parse_args('--version'.split())
the demo 2.0

count统计参数出现的次数

>>> import argparse
>>> parse = argparse.ArgumentParser()
>>> parse.add_argument('-b',action = 'count')
_CountAction(option_strings=['-b'], dest='b', nargs=0, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parse.parse_args('-b -b'.split())
Namespace(b=2)

nargs:参数的数量
值可以为整数N(N个),*(任意多个),+(一个或更多)
值为?时,首先从命令行获得参数,若没有则从const获得,然后从default获得:
dest:参数值就保存为parse_args()返回的命名空间对象中名为该 dest 参数值的一个属性。
如果提供dest,例如dest="a",那么可以通过args.a访问该参数
default:设置参数的默认值
type:把从命令行输入的结果转成设置的类型
choice:允许的参数值

parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity")

required:是否必选
desk:可作为参数名
help:参数命令的介绍

五、参数有几种写法:

最常见的空格分开:

>>> parser.parse_args('-x X'.split())
Namespace(foo=None, x='X')
>>> parser.parse_args('--foo FOO'.split())
Namespace(foo='FOO', x=None)

长选项用=分开 ( “长”选项名字,即选项的名字多于一个字符)

>>> parser.parse_args('--foo=FOO'.split())
Namespace(foo='FOO', x=None)

短选项可以写在一起:

>>> parser.parse_args('-xX'.split())
Namespace(foo=None, x='X')

感谢
Python命令行解析库argparse

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

推荐阅读更多精彩内容

  • python Argparse模块的使用 标签:python 参考: Argparse Tutorial:http...
    初来的雨天阅读 2,087评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • getopt:和C中的getopt()等价。optparse:2.7后已不推荐使用。argparse:基于optp...
    顾慎为阅读 8,679评论 1 10
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • argparse是一个python中的命令行解析模块 parser = argparse.ArgumentPars...
    律动的时间线阅读 369评论 0 0