文章目录
- 一、一个简单的示例
- 1.导入模块
- 2.创建解析器
- 3.添加参数
- 4.解析参数
- 5.使用解析的参数
- 6.完整程序
- 7.运行
- 二、更多用法
- 1.ArgumentParser对象创建时的参数
- 2.add_argument()的参数
- (1)name:名称
- 1)位置参数
- 2)可选参数
- 3)结合位置参数和可选参数
- (2)action:对参数的行为
- (3)nargs:参数个数
- (4)default:默认值
- (5)choices:命令行参数应从一组限制值中选择
参考资料:
官方文档,最全面详细
菜鸟教程:Argparse 教程 — Python 文档
csdn博客:argparse简介
csdn博客:python中的argparse基本用法
一、一个简单的示例
1.导入模块
import argparse
2.创建解析器
parser = argparse.ArgumentParser(description="这是一个示例程序")
3.添加参数
parser.add_argument('name', type=str, help='你的名字')
parser.add_argument('age', type=int, help='你的年龄')
parser.add_argument('--city', type=str, help='你所在的城市', default='未知')
4.解析参数
args = parser.parse_args()
5.使用解析的参数
print(f"你好, {args.name}!")
print(f"你 {args.age} 岁了。")
print(f"你住在 {args.city}。")
6.完整程序
import argparse
def main():
# 创建解析器
parser = argparse.ArgumentParser(description="这是一个示例程序")
# 添加参数
parser.add_argument('name', type=str, help='你的名字')
parser.add_argument('age', type=int, help='你的年龄')
parser.add_argument('--city', type=str, help='你所在的城市', default='未知')
# 解析参数
args = parser.parse_args()
# 使用解析的参数
print(f"你好, {args.name}!")
print(f"你 {args.age} 岁了。")
print(f"你住在 {args.city}。")
if __name__ == "__main__":
main()
7.运行
python example.py guodong 18 --city wuhan
运行结果:
二、更多用法
1.ArgumentParser对象创建时的参数
以下为部分参数:
prog:程序的名称,默认为 os.path.basename(sys.argv[0]),即执行时的程序名。可以通过设置 prog= 修改显示的程序名称。
usage:描述程序的使用方式,默认根据添加到解析器的参数自动生成。可以通过 usage= 自定义使用说明。
description:参数帮助前显示的文本。默认为空。使用 description= 可添加简要的程序功能描述。
epilog:参数帮助后显示的文本。默认为空。通过 epilog= 可添加额外的程序说明。
parents:一个包含需要包含的其他 ArgumentParser 对象的列表。可以通过 parents= 将这些参数添加到当前的 ArgumentParser 对象中。
add_help:是否添加 -h/–help 选项显示帮助信息,默认为 True。可以通过 add_help=False 禁用此选项。
exit_on_error:当出现解析错误时,是否退出并显示错误信息,默认为 True。可以通过 exit_on_error=False 禁用此行为。
2.add_argument()的参数
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
name or flags - 可以是一个名称或一组选项字符串,例如 foo 或 -f, --foo。
action - 指定当命令行遇到这个参数时所采取的基本操作类型。
nargs - 指定应该消耗的命令行参数的数量。
const - 某些 action 和 nargs 选项需要的常量值。
default - 如果命令行中没有出现该参数,并且它也不存在于命名空间对象中,所产生的值。
type - 命令行参数应该被转换成的类型。
choices - 参数允许的取值序列。
required - 指定命令行选项是否可以省略(仅对可选参数有效)。
help - 参数的简短描述。
metavar - 在使用信息中作为参数的名称。
dest - 指定解析参数后添加到命名空间对象的属性名称。
(1)name:名称
在添加参数时,要指定其名称。
当调用 parse_args() 时,可选参数将通过 “-” 前缀识别,剩余的参数将被视为位置参数。
以下为一个示例:
>>>parser = argparse.ArgumentParser(prog='PROG')
>>>parser.add_argument('-f', '--foo')
>>>parser.add_argument('bar')
>>>parser.parse_args(['BAR'])
Namespace(bar='BAR', foo=None)
>>>parser.parse_args(['BAR', '--foo', 'FOO'])
Namespace(bar='BAR', foo='FOO')
>>>parser.parse_args(['--foo', 'FOO'])
usage: PROG [-h] [-f FOO] bar
PROG: error: the following arguments are required: bar
首先用add_argument()添加了两个参数,一个是位置参数bar,一个是可选参数-foo,或者简称为-f。然后用parse_args()解析参数,解析结果见上(>>>后为代码,其余的即结果)。
1)位置参数
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
2)可选参数
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")
运行:
$ python3 prog.py -v
verbosity turned on
3)结合位置参数和可选参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true",
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:
print(f"the square of {args.square} equals {answer}")
else:
print(answer)
$ python3 prog.py
usage: prog.py [-h] [-v] square
prog.py: error: the following arguments are required: square
$ python3 prog.py 4
16
$ python3 prog.py 4 --verbose
the square of 4 equals 16
$ python3 prog.py --verbose 4
the square of 4 equals 16
(2)action:对参数的行为
1)store:默认值,存储参数
2)append:这会存储一个列表,并将每个参数值附加到列表中
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])
3)count:计算关键字出现的次数
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--verbose', '-v', action='count', default=0)
>>> parser.parse_args(['-vvv'])
Namespace(verbose=3)
4)version:打印版本信息
>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
>>> parser.parse_args(['--version'])
PROG 2.0
(3)nargs:参数个数
ArgumentParser 对象通常将单个命令行参数与要执行的单个操作关联起来。nargs 关键字参数将不同数量的命令行参数与单个操作关联起来。
支持的值包括:
1)N (一个整数)。命令行中的 N 个参数将一起收集到一个列表中。例如:
复制代码
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs=2)
>>> parser.add_argument('bar', nargs=1)
>>> parser.parse_args('c --foo a b'.split())
Namespace(bar=['c'], foo=['a', 'b'])
注意,nargs=1 会产生一个包含一个项目的列表。这与默认情况不同,在默认情况下,项目本身被单独产生。
2)‘?’。如果可能,从命令行中消耗一个参数,并作为单个项目产生。如果没有命令行参数,则会产生默认值。请注意,对于可选参数,还有一种情况——选项字符串存在但未跟随命令行参数。在这种情况下,将产生 const 中的值。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='?', const='c', default='d')
>>> parser.add_argument('bar', nargs='?', default='d')
>>> parser.parse_args(['XX', '--foo', 'YY'])
Namespace(bar='XX', foo='YY')
>>> parser.parse_args(['XX', '--foo'])
Namespace(bar='XX', foo='c')
>>> parser.parse_args([])
Namespace(bar='d', foo='d')
nargs='?'
更常见的用法之一是允许可选的输入和输出文件:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
>>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout)
>>> parser.parse_args(['input.txt', 'output.txt'])
Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>, outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
>>> parser.parse_args([])
Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>, outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)
3)‘*’。所有存在的命令行参数都会被收集到一个列表中。注意,一般来说,不太可能有多个带有 nargs=‘’ 的位置参数,但多个带有 nargs='’ 的可选参数是可能的。例如:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='*')
>>> parser.parse_args('a b --foo x y --bar 1 2'.split())
Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])
4)‘+’。与 ‘*’ 类似,所有存在的命令行参数都会被收集到一个列表中。此外,如果没有至少一个命令行参数存在,则会生成错误消息。例如:
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('foo', nargs='+')
>>> parser.parse_args(['a', 'b'])
Namespace(foo=['a', 'b'])
>>> parser.parse_args([])
usage: PROG [-h] foo [foo ...]
PROG: error: the following arguments are required: foo
如果未提供 nargs 关键字参数,消耗的参数数量由操作决定。通常,这意味着将消耗单个命令行参数,并产生单个项目(而不是列表)。
(4)default:默认值
所有可选参数和某些位置参数都可以在命令行中省略。add_argument() 的 default 关键字参数的值默认为 None,它指定了如果命令行参数不存在时应该使用的值。对于可选参数,当命令行中没有出现选项字符串时,将使用默认值。
(5)choices:命令行参数应从一组限制值中选择
当解析命令行时,将检查参数值,如果参数不是可接受的值之一,将显示错误消息:
>>> parser = argparse.ArgumentParser(prog='game.py')
>>> parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
>>> parser.parse_args(['rock'])
Namespace(move='rock')
>>> parser.parse_args(['fire'])
usage: game.py [-h] {rock,paper,scissors}
game.py: error: argument move: invalid choice: 'fire' (choose from 'rock',
'paper', 'scissors')