【python】argparse --- 命令行选项、参数和子命令解析器

举报
子都爱学习 发表于 2021/11/08 10:11:41 2021/11/08
【摘要】 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


命名空间对象

class argparse.Namespace

由 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。