1、argparse
argparse 是命令行选项、参数和子命令解析器
argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息
有关 Python 命令行解析更细致的介绍,请参阅 argparse 教程。
关于 argparse
import optparse
import argparse
print(dir(optparse))
print(optparse.__doc__)
print("*" * 100)
print(dir(argparse))
print(argparse.__doc__)
简单示例:
import argparse
# 使用 argparse 的第一步是创建一个 ArgumentParser 对象:
parser = argparse.ArgumentParser(description='处理命令行参数')
# 添加参数
parser.add_argument(
'integers', metavar='N', type=int, nargs='+',help='输入一个整数'
)
parser.add_argument(
'--sum', dest='accumulate', action='store_const', const=sum,
default=max, help='求和, 默认 max()'
)
# 解析参数,ArgumentParser 通过 parse_args() 方法解析参数
# 通常 parse_args() 参数为空时,将自动从 sys.argv 中确定命令行参数。
try:
args_1 = parser.parse_args() # 从 sys.argv 读取参数
print(args_1)
except BaseException as e:
print(e)
arg_list = ['--sum', '7', '-1', '42']
# 从列表中解析参数
args_2 = parser.parse_args(arg_list)
print(args_2)
ArgumentParser 对象
class argparse.
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, allow_abbrev=True, exit_on_error=True)
创建一个新的 ArgumentParser 对象。所有的参数都应当作为关键字参数传入。每个参数在下面都有它更详细的描述,但简而言之,它们是:
-
prog - 程序的名称(默认值:
sys.argv[0]
) -
usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
-
description - 在参数帮助文档之前显示的文本(默认值:无)
-
epilog - 在参数帮助文档之后显示的文本(默认值:无)
-
parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内
-
formatter_class - 用于自定义帮助文档输出格式的类
-
prefix_chars - 可选参数的前缀字符集合(默认值: '-')
-
fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值:
None
) -
argument_default - 参数的全局默认值(默认值:
None
) -
conflict_handler - 解决冲突选项的策略(通常是不必要的)
-
add_help - 为解析器添加一个
-h/--help
选项(默认值:True
) -
allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:
True
) -
exit_on_error - 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值:
True
)
位置参数
示例代码:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"square", help="display a square of a given 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="参数verbosity")
parser.add_argument("--true_or_false", help="参数true_or_false", action="store_true")
args = parser.parse_args()
arg_verbosity = args.verbosity
print(arg_verbosity)
arg_true_or_false = args.true_or_false
print(arg_true_or_false)
关键词 action
赋值为 "store_true"
。这意味着,当这一选项存在时,为 args.verbose
赋值为 True
。没有指定时则隐含地赋值为 False
。
短选项
示例代码:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"-v", "--verbose",
help="increase output verbosity",
action="store_true"
)
args = parser.parse_args()
if args.verbose:
print("verbosity turned on")
位置参数、可选参数 混合使用
示例代码:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"square", type=int,
help="显示输入数字的平方和"
)
parser.add_argument(
"-v", "--verbosity", action="count", default=0,
help="输出详细信息"
)
args = parser.parse_args()
answer = args.square ** 2
if args.verbosity >= 2:
print(f"the square of {args.square} equals {answer}")
elif args.verbosity >= 1:
print(f"{args.square}^2 == {answer}")
else:
print(answer)
关键字
default
用来设置默认参数。默认情况下如果一个可选参数没有被指定,它的值会是None
,
矛盾的选项( 互斥参数 )
add_mutually_exclusive_group()
允许指定彼此相互冲突的选项。
示例:将引入 --quiet
选项,它将与 --verbose
正好相反:
示例代码:
import argparse
parser = argparse.ArgumentParser(description="简单计算")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x ** args.y
if args.quiet:
print(answer)
elif args.verbose:
print("{} to the power {} equals {}".format(args.x, args.y, answer))
else:
print("{}^{} == {}".format(args.x, args.y, answer))