Python的argparse模块

我主要想做的功能就是执行python脚本时带上参数,然后执行参数对应的功能。 

基础学习

官方解读:https://docs.python.org/zh-cn/3/library/argparse.html

主要有三个步骤:

1. 创建 ArgumentParser() 对象

2. 调用 add_argument() 方法添加参数

3. 使用 parse_args() 解析添加的参数

添加参数

分为添加位置参数-positional arguments和可选参数-optional arguments

添加位置参数声明的参数名前缀不带-或--,按照顺序进行解析,在命令中必须出现,否则报错。

parser.add_argument("a")

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)')

其中action参数的'store_const'指的是:触发action时的动作为sum,默认值是输出max(???待确认)。

$python prog.py 1 2 3 4  #1,2,3,4是为位置参数,必须有的(但是怎么从参数中确认这个参数的个数是应该是多少个呢?)

4 #默认是输出最大值

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

10 #加了可选参数之后,是进行求和运算

//1216更新学习到此,此后继学习这一模块

1217更新:

解析参数

如例子:
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)')

parser.add_argument('--foo', help='foo help')

ArgumentParser 通过 parse_args() 方法解析参数。它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。

# args = parser.parse_args(['--sum', '7', '-1', '42']) #如果此处已经写好了参数,则直接获取这里面的参数执行--sum,而不从命令行读取,即使执行脚本是输出了其他数字进行--sum,输出结果为48

args = parser.parse_args() #  但是通常情况下,parse_args() 会被不带参数调用,而 ArgumentParser 将自动从 sys.argv 中确定命令行参数,这是命令行参数生效。

print(args.accumulate(args.integers))

ArgumentParser 对象学习

class argparse.ArgumentParser(prog=Noneusage=Nonedescription=Noneepilog=Noneparents=[ ]formatter_class=argparse.HelpFormatterprefix_chars='-'fromfile_prefix_chars=Noneargument_default=Noneconflict_handler='error'add_help=Trueallow_abbrev=Trueexit_on_error=True)

prog:表示在显示帮助信息的的程序的名字,默认值是sys.argv[0](我理解的应该就是脚本的名字),但是如果在创建这个对象的时候定义了prog的值,如prog="ArgparseLearning",则执行这个脚本的时候 --help显示的名字将是ArgparseLearning:

parser = argparse.ArgumentParser(description='Process some integers.',prog="ArgparseLearning")

定义prog

要想在其他地方引用prog设置的值,无论是从 sys.argv[0] 或是从 prog= 参数确定的程序名称,都可以在帮助消息(help参数)里通过 %(prog)s 格式串来引用。

parser.add_argument('--foo', help='foo of the %(prog)s program')

--help脚本是显示:

引用prog

usage:默认情况下,ArgumentParser 根据它包含的参数来构建用法消息:这个从以上的几个截图可以看出来。可以使用自行定义usage关键字来覆盖默认值。例如:

parser = argparse.ArgumentParser(description='Process some integers.',prog="ArgparseLearning", usage='%(prog)s [-h][--sum][--foo]')

运行脚本显示:

usage的实例

description:大多数对 ArgumentParser 构造方法的调用都会使用 description= 关键字参数。这个参数简要描述这个程度做什么以及怎么做。在帮助消息中,这个描述会显示在命令行用法字符串和各种参数的帮助消息之间,如以上的一些截图,不在赘述。在默认情况下,description 将被换行以便适应给定的空间。如果想改变这种行为,见 formatter_class 参数。

epilog: 一些程序喜欢在 description 参数后显示额外的对程序的描述。这种文字能够通过给 ArgumentParser:: 提供 epilog= 参数而被指定。

parser = argparse.ArgumentParser(description='Process some integers.',prog="ArgparseLearning", usage='%(prog)s [-h][--sum][--foo]',epilog="just some test msg for epilog param")

运行显示:

epilog示例

parents:有些时候,少数解析器会使用同一系列参数。 单个解析器能够通过提供 parents= 参数给 ArgumentParser 而使用相同的参数而不是重复这些参数的定义。parents= 参数使用 ArgumentParser 对象的列表,从它们那里收集所有的位置和可选的行为,然后将这写行为加到正在构建的 ArgumentParser 对象。请注意大多数父解析器会指定 add_help=False . 否则, ArgumentParse 将会看到两个 -h/--help 选项(一个在父参数中一个在子参数中)并且产生一个错误。使用parent=定义的内容之前,先初始化,在子解析器之后改变父解析器,变化不会应用到子解析器上。

parent_parser = argparse.ArgumentParser(add_help=False)

parent_parser.add_argument('--parent', type=int)

parser = argparse.ArgumentParser(description='Process some integers.',prog="ArgparseLearning", usage='%(prog)s [-h]['--sum][--foo]',epilog="just some test msg for epilog param",parents=[parent_parser])

运行脚本得到://这部分读得不是很懂.....等待高阶用法指点迷津

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

推荐阅读更多精彩内容