argparse 模块用于命令行选项、参数和子命令的解析器
argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要哪些参数,argparse 将会知道如何从sys.argv解析他们。argparse 模块还能自动生成帮助和用法消息文本。
命令行解析可分解为三个部分:
- 1:创建ArgumentParser对象 ( parser = argparse.ArgumentParser )
- 2:添加参数(位置参数或可选参数)( parser.add_argument )
- 3:解析命令行参数 ( args = parser.parse_args )
import argparse #导入argparse包
#把命令行参数解析写到parse_args函数中
def parse_args():
parser = argparse.ArgumentParser(
prog='ProgramName',
description='What the program dose',
epilog='Text at the bottom of help') #1:创建参数对象
parser.add_argument('--config','-c', metavar ="config文件", type=str, required=True,
help="流程必须的config 配置文件") #2:往参数对象里添加值参数
parser.add_argument('--steps', '-s', type=str, default="all",
help="指定分析步骤。 all 表示分析所有步骤。[默认:%(default)s]") #2:往参数对象里添加值参数
parser.add_argument('--thread', type=int, default=20,
help="可用的线程数量。 [默认:%(default)s]") #2:往参数对象里添加值参数
args = parser.parse_args() #3:解析命令行参数
return args
if __name__ == '__main__':
args = parse_args()
print(args.config, args.steps, args.thread)
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 – 程序的名称 (默认值:
os.path.basename(sys.argv[0])
) - usage – 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
- description – 要在参数帮助信息之前显示的文本(默认:无文本)
- epilog – 要在参数帮助信息之后显示的文本(默认:无文本)
- parents – 一个
ArgumentParser
对象的列表,它们的参数也应包含在内 #不常用 - formatter_class – 用于自定义帮助文档输出格式的类
- prefix_chars – 可选参数的前缀字符集合(默认值: ‘-‘)
- add_help – 为解析器添加一个
-h/--help
选项(默认值:True
) - ……
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 – 命令行参数应当被转换成的类型。
- required – 此命令行选项是否可省略 (仅选项可用)。
- help – 一个此选项作用的简单描述。
- metavar – 在使用方法消息中使用的参数值示例。
- ……
parse_args() 方法
ArgumentParser.parse_args(args=None, namespace=None)
将参数字符串转换为对象并将其设为命名空间的属性。 返回带有成员的命名空间。
parse_args()一般使用默认参数即可完成转换。
通常情况下,我们都会把 命令行参数的获取、解析写入子函数(parse_args()
)中,然后在脚本的主体中去调用,这样可以实现模块化和较好的可移植性。
更加详细的内容介绍参考python官方的argparse包介绍。