【python】argparse --- 命令行选项、参数和子命令解析器
【摘要】 argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。创建解析器对象----ArgumentParser 对象利用argparse创建一个解析器# 创建参数解析器import argparsepars...
argparse
模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse
将弄清如何从 sys.argv
解析出那些参数。 argparse
模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
创建解析器对象----ArgumentParser 对象
利用 argparse 创建一个解析器
# 创建参数解析器
import argparse
parser = argparse.ArgumentParser(prog='ls', add_help=True, description='Process some integers') # 获得一个参数解析器
parser.print_help() # 打印帮助
# usage: ls [-h]
#
# Process some integers
#
# optional arguments:
# -h, --help show this help message and exit
#
# Process finished with exit code 0
添加参数----add_argument() 方法
# 位置参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('square', help='square the number', type=int)
args = parser.parse_args()
print(args.square**2)
# $ python3 prog.py 4
# 16
# $ python3 prog.py four
# usage: prog.py [-h] square
# prog.py: error: argument square: invalid int value: 'four'
# 可选参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--verbosity', help='increase output verbosity')
args = parser.parse_args()
if args.verbosity:
print('verbosity turned on')
# $ python3 prog.py --verbosity 1
# verbosity turned on
# $ python3 prog.py
# $ python3 prog.py --help
# usage: prog.py [-h] [--verbosity VERBOSITY]
#
# options:
# -h, --help show this help message and exit
# --verbosity VERBOSITY
# increase output verbosity
# $ python3 prog.py --verbosity
# usage: prog.py [-h] [--verbosity VERBOSITY]
# prog.py: error: argument --verbosity: expected one argument
参数解析--parse_args() 方法
参数解析有两种:
1.将一个字符串列表传给 parse_args() 来实现。 它适用于在交互提示符下进行检测:
parser = argparse.ArgumentParser()
parser.add_argument(
... 'integers', metavar='int', type=int, choices=range(10),
... nargs='+', help='an integer in the range 0..9')
parser.add_argument(
... '--sum', dest='accumulate', action='store_const', const=sum,
... default=max, help='sum the integers (default: find the max)')
parser.parse_args(['1', '2', '3', '4'])
# Namespace(accumulate=<built-in function max>, integers=[1, 2, 3, 4])
parser.parse_args(['1', '2', '3', '4', '--sum'])
# Namespace(accumulate=<built-in function sum>, integers=[1, 2, 3, 4])
2.一般实际使用中,执行脚本时后面附带参数,来解析:
python xxx.py 4 -v
-
由 parse_args() 默认使用的简单类,可创建一个存放属性的对象并将其返回。
这个类被有意做得很简单,只是一个具有可读字符串表示形式的 object。 如果你更喜欢类似字典的属性视图,你可以使用标准 Python 中惯常的 vars():
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args = parser.parse_args(['--foo', 'BAR'])
vars(args)
# {'foo': 'BAR'}
- 另一个用处是让 ArgumentParser 为一个已存在对象而不是为一个新的 Namespace 对象的属性赋值。 这可以通过指定 namespace= 关键字参数来实现:
class C:
pass
c = C()
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.parse_args(args=['--foo', 'BAR'], namespace=c)
c.foo
# 'BAR'
详细示例使用:
import argparse
parser = argparse.ArgumentParser(prog='ls', add_help=True, description='Process some integers') # 获得一个参数解析器 add_help是否增加详细帮助 description描述
parser.add_argument('path1', nargs=1, default='.2323',type=str, help='echo the string that you use here') # 增加位置参数参数 type限制类型
parser.add_argument('path2', nargs='?', help='echo the string that you use here') # nargs: ?-可有可无 +-至少一个 *-任意个 数字-指定某个
parser.add_argument('-a', '-all', action="store_true", dest='al', help='show all') # dest 别名 -a短选项 -all长选项 action动作[store_true,count]
parser.add_argument('-f', '-false', action='store_const', const='f', help='show const') # 默认情况下如果一个可选参数没有被指定,它的值会是 None
parser.print_help() # 打印帮助
args = parser.parse_args(["abc", "123", '-a', '-f']) # 分析参数
print('**********************************')
print(args)
print(args.al)
# usage: ls [-h] [-a] [-f] path1 [path2]
#
# Process some integers
#
# positional arguments:
# path1 echo the string that you use here
# path2 echo the string that you use here
#
# optional arguments:
# -h, --help show this help message and exit
# -a, -all show all
# -f, -false show const
# **********************************
# Namespace(al=True, f='f', path1=['abc'], path2='123')
# True
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)