摘要
本文部分内容来源于网络,个人收集整理,请勿传播
使用argparse模块可以很容易的编写友好的命令行接口。可以通过它定义所需要的参数, argparse能够接收并解析这些sys.argv(参数,选项)。同时argparse模块可以自动生成帮助和使用信息,并且会对无效参数做出错误提示。
python早期使用optparse模块,2.7版本时停止optparse模块的开发,同时开始argparse模块的开发维护,因此建议各位直接使用argparse。
本文使用python3版本作为基础环境。
本文内容主要源自官方文档,加上本人在学习过程中的理解。官方文档
一个简单的例子
1 | import argparse |
1 | $ python prog.py -h |
使用步骤
1 | # 导入模块 |
ArgumentParser对象参数解析
这部分并非重点内容,只要知道前几个参数的用法即可
1 | 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) |
- prog - The name of the program (default: sys.argv[0])
- usage - The string describing the program usage (default: generated from arguments added to parser)
- description - Text to display before the argument help (default: none)
- epilog - Text to display after the argument help (default: none)
- parents - A list of ArgumentParser objects whose arguments should also be included
- formatter_class - A class for customizing the help output
- prefix_chars - The set of characters that prefix optional arguments (default: ‘-‘)
- fromfile_prefix_chars - The set of characters that prefix files from which additional arguments should be read (default: None)
- argument_default - The global default value for arguments (default: None)
- conflict_handler - The strategy for resolving conflicting optionals (usually unnecessary)
- add_help - Add a -h/–help option to the parser (default: True)
- allow_abbrev - Allows long options to be abbreviated if the abbreviation is unambiguous. (default: True)
prog
prog参数相当于python中的sys.argv[0],默认为当前执行脚本的脚本名,可以进行自定义。
1 | parser = argparse.ArgumentParser(prog='myprogram') |
usage
usage参数用来提示参数项使用方式,默认会自动生成,可以进行自定义
1 | parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') |
description
description用来添加帮助菜单中的描述信息,默认为空。
1 | parser = argparse.ArgumentParser(description='A foo that bars') |
epilog
epilog用来添加帮助菜单中的程序结尾描述信息,默认为空。
1 | parser = argparse.ArgumentParser( |
parents
有时候,有些参数项可能作为一组通用参数项来分享给不通的程序,而无需重复的来定义这些参数项,这时候就可以用到parents参数,子对象会继承parents的所有参数项。
1 | # 首先定义一个用来继承的parents,需要关闭add_help参数 |
formatter_class
使用这个参数的几个选项可以把帮助信息中的格式进行修改。
RawDescriptionHelpFormatter
定制描述信息缩进格式
1 | parser = argparse.ArgumentParser( |
ArgumentDefaultsHelpFormatter
自动增加defaults值显示
1 | parser = argparse.ArgumentParser( |
MetavarTypeHelpFormatter
用参数类型来替代帮助信息
1 | parser = argparse.ArgumentParser( |
prefix_chars
prefix_chars可以定义选项参数的前缀,默认为[-/–]。
1 | parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+') |
fromfile_prefix_chars
fromfile_prefix_chars可以指定文件为添加参数项值。
1 | with open('args.txt', 'w') as fp: |
argument_default
正常来说给一个参数项设定默认值可以通过add_argument()或者set_defaults()方法来添加,但是只能对每个参数单独制定,但是使用argument_default参数可以给所有没有默认值的参数一个默认值。
1 | Generally, argument defaults are specified either by passing a default to add_argument() or by calling the set_defaults() methods with a specific set of name-value pairs. Sometimes however, it may be useful to specify a single parser-wide default for arguments. This can be accomplished by passing the argument_default= keyword argument to ArgumentParser. For example, to globally suppress attribute creation on parse_args() calls, we supply argument_default=SUPPRESS: |
这个参数没看懂,贴一下官方文档吧
1 | parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) |
allow_abbrev
通常情况,当你传递一个参数项的时候,可以传递一个缩写的参数项,allow_abbrev参数可以关闭缩写参数项(python3)。
1 | parser = argparse.ArgumentParser(prog='PROG', allow_abbrev=False) |
conflict_handler
正常来说你指定了一个参数项,是不能在此指定来覆盖已经指定的参数项的,conflict_handler可以开放这个功能。
1 | 'PROG') parser = argparse.ArgumentParser(prog= |
add_help
可以用这个参数来关闭默认的help信息,然后自定义。关闭了之后还是可以用parser.print_help() 来打印帮助信息的。
1 | parser = argparse.ArgumentParser(prog='PROG', add_help=False) |
add_argument方法参数解析
这个才是本文的重点
1 | ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest]) |
- name or flags - Either a name or a list of option strings, e.g. foo or -f, –foo.
- action - The basic type of action to be taken when this argument is encountered at the command line.
- nargs - The number of command-line arguments that should be consumed.
- const - A constant value required by some action and nargs selections.
- default - The value produced if the argument is absent from the command line.
- type - The type to which the command-line argument should be converted.
- choices - A container of the allowable values for the argument.
- required - Whether or not the command-line option may be omitted (optionals only).
- help - A brief description of what the argument does.
- metavar - A name for the argument in usage messages.
- dest - The name of the attribute to be added to the object returned by parse_args().
name or flags
选项名、参数名、标签。分为两种
- 带前缀:-f -foo ,参数项
- 不带前缀:bar,位置变量
1 | parser.add_argument('-f', '--foo') |
action
action用来定义添加参数项的属性类型。
store
默认类型,只是用来存储一个值。
1 | parser = argparse.ArgumentParser() |
store_const
和const参数一起使用,存储一个常量。
1 | parser = argparse.ArgumentParser() |
store_true & store_false
存储常量的特殊类型,存储布尔值。
1 | parser = argparse.ArgumentParser() |
append
追加属性,参数项可以多次出现,多次值会追加成一个list。
1 | parser = argparse.ArgumentParser() |
append_const
和const一起使用,用来追加常量。
1 | parser = argparse.ArgumentParser() |
count
数量统计,参数项可以多次出现,记录出现次数为选项的值。
1 | parser = argparse.ArgumentParser() |
help
自定义help选项的时候使用的。
version
创建版本信息使用。
1 | import argparse |
自定义action
1 | class FooAction(argparse.Action): |
nargs
这个参数用来规定添加的参数项对应参数值的个数。
- 1、2、3…
- ‘?’ 0或1个
- ‘+’ 至少一个
- ‘*’ 0到多个
- argparse.REMAINDER ???
1 | '--foo', nargs=2) parser.add_argument( |
const
设定一个常量的值,与store_const 和append_const 一起使用。
default
设定一个默认值
type
设定参数项的值的类型。默认str类型,可以int、float等。
1 | parser = argparse.ArgumentParser() |
可以自定义类型
1 | def perfect_square(string): |
可以配合使用choices参数来定义参数值范围
1 | 'PROG') parser = argparse.ArgumentParser(prog= |
choices
用来限制参数值的选定范围
1 | parser.add_argument('move', choices=['rock', 'paper', 'scissors']) |
required
设定这个属性可是让参数项变成必选项。
1 | parser = argparse.ArgumentParser() |
help
用来添加参数项的帮助信息
metavar
打印帮助信息时,参数项的演示值。
1 | parser = argparse.ArgumentParser() |
dest
可以用来指定参数项名字。
1 | parser = argparse.ArgumentParser() |
parse_args()方法参数说明
用来解析参数项,这部分不是重点,看看就好。
Option value syntax
参数项使用方式
1 | 'PROG') parser = argparse.ArgumentParser(prog= |
Invalid arguments
错误输出,参数项或参数值不符合规定时会提示错误信息
1 | 'PROG') parser = argparse.ArgumentParser(prog= |
Arguments containing
1 | 'PROG') parser = argparse.ArgumentParser(prog= |
Argument abbreviations (prefix matching)
1 | 'PROG') parser = argparse.ArgumentParser(prog= |
Beyond sys.argv
1 | parser = argparse.ArgumentParser() |
The Namespace object
1 | parser = argparse.ArgumentParser() |
其他方法
这部分内容有一些东西还是比较有用的
Sub-commands
子参数项,可以设置子参数项的参数项。
1 | # create the top-level parser |
还可以设置单独的标题和描述信息
1 | parser = argparse.ArgumentParser() |
可以添加别名
1 | parser = argparse.ArgumentParser() |
1 | # sub-command functions |
1 | parser = argparse.ArgumentParser() |
FileType objects
1 | parser = argparse.ArgumentParser() |
Argument groups
参数项组
1 | 'PROG', add_help=False) parser = argparse.ArgumentParser(prog= |
Mutual exclusion
1 | 'PROG') parser = argparse.ArgumentParser(prog= |
Parser defaults
1 | parser = argparse.ArgumentParser() |
Printing help
1 | ArgumentParser.print_usage(file=None) |
Partial parsing
1 | parser = argparse.ArgumentParser() |
Customizing file parsing
1 | class MyArgumentParser(argparse.ArgumentParser): |
Exiting methods
1 | ArgumentParser.exit(status=0, message=None) |