就像linux 后面的参数一样。
该argparse
模块可以轻松编写用户友好的命令行界面。该程序定义了它需要的参数,argparse
并将弄清楚如何解析它们sys.argv
。argparse
当用户给程序提供无效参数时,该模块还会自动生成帮助和使用消息并发出错误
示例
以下代码是一个Python程序,它获取整数列表并生成总和或最大值:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
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)')
args = parser.parse_args()
print(args.accumulate(args.integers))
假设上面的Python代码保存在一个名为的文件中prog.py
,它可以在命令行运行并提供有用的帮助消息:
$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
使用适当的参数运行时,它会输出命令行整数的总和或最大值:
$ python prog.py 1 2 3 4
4
$ python prog.py 1 2 3 4 --sum
10
如果传入无效参数,则会发出错误:
$ python prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'
以下部分将引导您完成此示例。
1.创建解析器创建一个ArgumentParser对象
>>> parser = argparse.ArgumentParser(description='Process some integers.')
2.添加参数
使用add_argument()方法填充有关程序参数的信息。parse_args()调用时会存储和使用此信息
>>> 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)')
稍后,调用parse_args()
将返回具有两个属性的对象,integers
并且accumulate
。该integers
属性将是一个或多个整数的列表,该accumulate
属性将是sum()
函数(如果--sum
在命令行中指定)或max()
函数(如果不是)。
3.解析参数
ArgumentParser
通过该parse_args()
方法解析参数 。这将检查命令行,将每个参数转换为适当的类型,然后调用相应的操作。在大多数情况下,这意味着Namespace
将从命令行解析的属性构建一个简单的对象:
>>> parser.parse_args(['--sum', '7', '-1', '42'])
Namespace(accumulate=, integers=[7, -1, 42])
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 )
创建一个新ArgumentParser
对象。所有参数都应作为关键字参数传递。每个参数在下面都有自己更详细的描述,但简而言之,它们是:
- PROG -程序的名称(默认:
sys.argv[0]
) - usage - 描述程序用法的字符串(默认值:从添加到解析器的参数生成)
- description - 参数help之前显示的文本(默认值:none)
- epilog - 参数help后显示的文本(默认值:none)
- parents -
ArgumentParser
还应包含其参数的对象列表 - formatter_class - 用于自定义帮助输出的类
- prefix_chars - 前缀可选参数的字符集(默认值:' - ')
- fromfile_prefix_chars -该组文件前缀字符从额外的参数应该读(默认值:
None
) - argument_default -为参数的全局默认值(默认值:
None
) - conflict_handler - 解决冲突选项的策略(通常是不必要的)
- add_help -添加
-h/--help
选项解析器(默认值:True
) - allow_abbrev - 如果缩写是明确的,则允许缩写长选项。(默认值:
True
)
在版本3.5中更改:添加了allow_abbrev参数。
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 - 某些操作和nargs选择所需的常量值。
- default - 如果命令行中不存在参数,则生成的值。
- type - 应转换命令行参数的类型。
- choices - 参数允许值的容器。
- required - 是否可以省略命令行选项(仅限选项)。
- help - 对参数的作用的简要说明。
- metavar - 用法消息中参数的名称。
- dest - 要添加到返回的对象的属性的名称
parse_args()
name of flags
该add_argument()
方法必须知道是否需要可选参数,如-f
或--foo
,或位置参数,如文件名列表。add_argument()
因此,传递给的第一个参数 必须是一系列标志或简单的参数名称。例如,可以创建一个可选参数,如:
>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')
当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
default
可以在命令行中省略所有可选参数和一些位置参数。值默认为的default
关键字参数 指定在命令行参数不存在时应使用的值。对于可选参数,在命令行中不存在选项字符串时使用该值:add_argument()
None``default
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', default=42)
>>> parser.parse_args(['--foo', '2'])
Namespace(foo='2')
>>> parser.parse_args([])
Namespace(foo=42)