argparse是Python标准库提供的命令行参数解析包,支持命令行选项、参数和子命令解析
介绍
- ArgumentParser objects
- The add_argument() method
- action 参数
help
打印当前解析器中所有选项的完整的帮助信息然后退出store
只是保存参数的值,默认的动作store_const
保存由 const 关键字参数指出的值store_true
和 store_false
它们是’store_const’ 的特殊情形,分别用于保存值 True 和 Falseappend
保存一个列表,并将每个参数值附加在列表的后面append_const
保存一个列表,并将const关键字参数指出的值附加在列表的后面count
计算关键字参数出现的次数
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--verbose', '-v', action='count')
>>> parser.parse_args('-vvv'.split())
Namespace(verbose=3)
default
没有设置值情况下的默认参数- choices 候选值参数
parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
- 必选参数
parser.add_argument('--foo', required=True)
- The parse_args() method
demo
普通示例
# ref https://docs.python.org/3/library/argparse.html#example
import argparse
parser = argparse.ArgumentParser(
description='Process some integers.',
prog="demo.py", # The name of the program (default: ``os.path.basename(sys.argv[0])``)
)
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('--bar', '-b', nargs='?', type=int, default=42,
help='the bar to %(prog)s (default: %(default)s)')
parser.add_argument('--version', '-v', action='version', version='<the version>')
args = parser.parse_args()
print(args.accumulate(args.integers))
说明:
nargs
表示候选值和含义如下:N
参数的绝对个数(例如:3)?
0或1个参数*
0或所有参数+
所有,并且至少一个参数
执行结果
$ python3 demo.py --help
usage: demo.py [-h] [--sum] [--bar [BAR]] [--version] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
options:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
--bar [BAR], -b [BAR]
the bar to demo.py (default: 42)
--version, -v show program's version number and exit
子命令
import argparse
def main():
parser = argparse.ArgumentParser(description='My program')
# 添加子命令
subparsers = parser.add_subparsers(title='Subcommands', dest='subcommand')
# 创建子命令解析器
add_parser = subparsers.add_parser('add', help='Add a number')
add_parser.add_argument('numbers', nargs='+', type=int, help='Numbers to add')
# 创建另一个子命令解析器
sub_parser = subparsers.add_parser('sub', help='Subtract a number')
sub_parser.add_argument('numbers', nargs='+', type=int, help='Numbers to subtract')
# 解析参数
args = parser.parse_args()
# 根据子命令执行操作
if args.subcommand == 'add':
result = sum(args.numbers)
print(f"The sum of the numbers is {result}")
elif args.subcommand == 'sub':
result = args.numbers[0]
for number in args.numbers[1:]:
result -= number
print(f"The result of subtracting the numbers is {result}")
if __name__ == '__main__':
main()
$ python3 demo2.py --help
python3 demo2.py --help
usage: demo2.py [-h] {add,sub} ...
My program
options:
-h, --help show this help message and exit
Subcommands:
{add,sub}
add Add a number
sub Subtract a number
$ python3 demo2.py add 1 2 3
The sum of the numbers is 6
$ python3 demo2.py sub 6 2
The result of subtracting the numbers is 4