Python学习之Argparse 解析脚本参数详解

Argparse 是 Python 标准库中推荐的命令行解析模块,经常需要解析脚本参数的话这是个方便的工具模块,摆脱万年手动 system.argv 。本文和大家分享的就是python中Argparse解析脚本参数相关内容,一起来看看吧,希望对大家学习python有所帮助。
引入
import argparse
parser = argparse.ArgumentParser(description=’描述说明,可用于 Help 输出说明’, add_help=True)
parser.parse_args()
ArgumentParser 可选参数如下:
· prog – 此脚本程序名称 (默认: sys.argv[0])
· usage – 用法说明 (默认: 根据参数自动生成)
· description – 脚本说明
· epilog – 也是说明,在 help 输出最后
· parents – 父 Parsers
· formatter_class – 输出帮助信息的定制类
· prefix_chars – 可选前缀参数字符(设置后参数名称需以此为前缀)
· fromfile_prefix_chars – 从文件读取可选前缀参数字符
· argument_default – 所有参数的默认值
· conflict_handler – 冲突处理器
· add_help – 是否添加帮助
常用方法
add_argument()
// test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(’-p’, ’--param’)args = parser.parse_args()print args.param
运行 python test.py -p value or python test.py --param value 即可。
add_argument 可选方法参数如下:
· name or flags - 参数的名字.
· action - 遇到参数时的动作,默认值是 store。store_const,表示赋值为 const;append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值; append_const,将参数规范中定义的一个值保存到一个列表;count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
· nargs - 参数的个数,可以是具体的数字,或者是 ? 号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数.
· const - action 和 nargs 所需要的常量值.
· default - 不指定参数时的默认值.
· type - 参数的类型. 如 int、str
· choices - 参数允许的值. 如:[‘a’, ‘b’, ‘c’]
· required - 可选参数是否可以省略(仅针对 optionals ).
· help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
· metavar - 在usage说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
· dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
add_mutually_exclusive_group()
设置冲突参数,当需要设置指定输入参数只能包含其中一个时即可用此方法。
// test.py
parse = argparse.ArgumentParser()group = parse.add_mutually_exclusive_group()group.add_argument("-a", action="store_true")group.add_argument("-b", action="store_true")
args = parse.parse_args()
此种情形下 test.py 输入参数只能包含 a 或 b, a、b 不能同时存在。
add_argument_group()
参数分组设置。当有分组命令的需求时可用,输入参数将归于所属分组下。
parse = argparse.ArgumentParser()
some_group = parse.add_argument_group(’Publish plugin’)
some_group.add_argument(’-f’  type=str)
add_subparsers()
子命令模式,类似 git commit 、 git push 等命令.
parse = argparse.ArgumentParser()sub_parse = parse.add_subparsers()# sub_parse opt...
Sample
下面由一个使用场景说起。一个脚本: publish.py ,包含两个功能:发布和查询,运行环境有测试服和正式服,发布时需要两个账号系统的密码,查询时需要一个账号系统的密码和版本、渠道参数。那么脚本如下,其它见注释:
// publish.py
import argparse
def get_args():
parse = argparse.ArgumentParser(description=’Publish tools.’, add_help=True)
# 操作输入,使用互斥参数并且参数必须输入且只能选一个
group = parse.add_mutually_exclusive_group(required=True)
# 查询操作
group.add_argument("-s", "--Search", action="store_true")
# 发布操作
group.add_argument("-p", "--Publish", action="store_true")
# 运行环境参数
parse.add_argument(’-e’, ’--Env’, type=str, help=’Running environment’, choices=[’test’, ’product’], default=’test’)
# 账号必选信息
parse.add_argument(’-a’, ’--ApiAuth’, required=True, type=str, help=’username:password’)
# 发布分组命令设置
publish_group = parse.add_argument_group(’Publish’)
publish_group.add_argument(’-f’, ’--FtpAuth’,  type=str, help=’username:password’)
# 查询分组命令设置
search_group = parse.add_argument_group(’Search’)
search_group.add_argument(’-c’, ’--channel’, type=str, help=’channel’)
search_group.add_argument(’-v’, ’--versonCode’, type=int, help=’Search verson code’)
args = parse.parse_args()
return vars(args)
args=get_args()print ’opt search?:’, args[’Search’],’ opt publish?:’, args[’Publish’], ’\n’, args
publish.py -h 使用帮助如下:
usage: test.py [-h] (-s | -p) [-e {test,product}] -a APIAUTH [-f FTPAUTH]
[-c CHANNEL] [-v HOSTVERSONCODE]
Publish tools.
optional arguments:
-h, --help            show this help message and exit
-s, --Search
-p, --Publish
-e {test,product}, --Env {test,product}
Running environment
-a APIAUTH, --ApiAuth APIAUTH
username:password
Publish plugin:
-f FTPAUTH, --FtpAuth FTPAUTH
username:password
Search plugin:
-c CHANNEL, --channel CHANNEL
channel
-v VERSONCODE, --VersonCode VERSONCODE
Search verson code
使用如下:
# 1 publish
python publish.py -p -a U -f U# 2 search
python publish.py -s -a U -c channel -v 100

来源:Rocko’s blog

时间: 2024-10-25 23:43:39

Python学习之Argparse 解析脚本参数详解的相关文章

Python学习笔记5:函数参数详解

一.函数的定义格式: def 函数名(参数列表): 函数体 def fun1(a, b, c): return a + b + c 二.位置传递:位置对应 print(fun1(3 ,2 ,1)) 输出: 6 三.关键字传递:位置参数要出现在关键字参数之前 print(fun1(3 ,c = 1, b = 2)) 输出: 6 四.参数默认值:可以给参数赋予默认值(default) def fun2(a, b, c = 100): return a + b + c print(fun2(1, 10

Python学习之os模块的使用详解

本文和大家分享的主要是python 中os 模块相关使用方法详解,一起来看看吧,希望对大家 学习python 有所帮助. os模块调用操作系统接口的模块 相关方法或属性: getcwd() ---  获取当前的操作目录,等同于 linux 中的 pwd 命令. 调用:os.getcwd() chdir() ---  改变 python 脚本的工作目录. 调用:os.chdir(path) (path 以字符串形式传入 ) 例如: >>> os.getcwd() 'C:\\Users\\B

Python学习之列表的内部实现详解

本文和大家分享的主要是列表在 CPython中的实现,一起来看看吧,希望对大家学习python有所帮助. Python 中的列表非常强大,看看它的内部实现机制是怎么样的,一定非常有趣. 下面是一段 Python 脚本,在列表中添加几个整数,然后打印列表. >>> l = [] >>> l.append(1) >>> l.append(2) >>> l.append(3) >>> l [1, 2, 3] >>

Python学习之异常重试解决方法详解

本文和大家分享的是在使用python 进行数据抓取中,异常重试相关解决办法,一起来看看吧,希望对大家学习python有所帮助. 在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理. 原先的流程: defcrawl_page(url): pass deflog_error(url): pass url = "" try: crawl_page(url) except: log_error(url) 改进后的流程: attempts =

Python学习之通用序列类型数据详解

本文和大家分享的主要是python通用序列类型数据的相关操作,一起来看看吧,希望对大家学习python有所帮助. Python的序列,Python有6种内建的序列,包括:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.其中最为常用的是Python的列表和元组. Python的序列 Python有6种内建的序列,包括:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.其中最为常用的是Python的列表和元组. Python序列的应用 Pyt

PYTHON学习0043:函数---time模块详解--2019-8-10

要使用time模块需先导入:import time1.time.time():打印当前时间戳表示从1970年至今经过的秒速.2.time.localtime(secs):将一个时间戳转换为当前时区的struct_time,secs为提供时,则以当前时间为准.可在括号里加数字,则返回数字对应时间: 可以看到包含了很多变量,可以采用拼接形式表示时间了.比如:先把time.time()赋值给变量a3.time.gmtime():和localtime()方法类似,gmtime()方法是返回UTC时间,即

python学习第四周之内置方法详解

1.python的内置方法有很多,用的时候可以自行百度,我只写几个我感兴趣的(任性.) 2.(1)bin(),将十进制转变为二进制 >>> bin(2) '0b10' (2)chr(),查看数字所对应的字母, >>> chr(98) 'b' (3)ord(),查看字母对应的数字 >>> ord('a') 97 (4)hex(),转换成十六进制 >>> hex(255) '0xff' (5)oct(),转成成八进制 >>&g

PYTHON学习0044:函数---datetime模块详解--2019-8-11

1.datetime.datetime.now():返回当前的datetime的日期类型:2.datetime.date.fromtimestamp():吧一个时间戳转为datetime日期类型:3.时间运算:datetime.datetime.now()+datetime.timedelta(4):datetime.timedelta()括号里默认单位为"天"4.时间替换:用replace函数: 原文地址:https://blog.51cto.com/13543767/2428482

PYTHON学习0045:函数---random模块详解--2019-8-11

1.取随机数:random.randint(1,100)从1到100取一个随机整数,包含100.2.random.randrange(1,100)和上一个类似,只不过这个不包含100.3.random.random():生成随机浮点数4.random.choice("sdfsf2323d23")从字符串里返回随机元素:5.random.sample("sdfsf2323d23",3)从给定字符串里随机返回3个元素,以列表形式展示:6.生成随机字符串:首先导入一个模块