Python 做为一个脚本语言,可以很方便地写各种工具。当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现)。
如果要以命令行执行,那你需要解析一个命令行参数解析的模块来帮你做这个苦力活。
Python 本身就提供了三个命令行参数解析模块,我这里罗列一下它们的大致情况供你了解。
getopt
,只能简单的处理命令行参数optparse
,功能强大,易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。argparse
,使其更加容易的编写用户友好的命令行接口。它所需的程序进程了参数定义,argparse将更好的解析sys.argv。同时argparse模块还能自动生成帮助及用户输入错误参数时的提示信息。 argparse
这一神器,它几乎能满足对命令解析器的所有需求。它支持解析一参数多值,可以自动生成help命令和帮助文档,支持子解析器,支持限制参数取值范围等等功能。
构建argparse模块对命令行界面的支持 argparse.ArgumentParser
的一个实例。 它是一个容器 参数规范,并具有将解析器作为整体应用的选项:
parser = argparse.ArgumentParser(
prog='ProgramName',
description='What the program does',
epilog='Text at the bottom of help')
ArgumentParser.add_argument()方法附加单个参数 规范到解析器。 它支持位置参数、 接受值和开/关标志:
parser.add_argument('filename') # positional argument
parser.add_argument('-c', '--count') # option that takes a value
parser.add_argument('-v', '--verbose',
action='store_true') # on/off flag
ArgumentParser.parse_args()方法运行解析器并放置 argparse.Namespace
对象中提取的数据:
args = parser.parse_args()
print(args.filename, args.count, args.verbose)
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])¶
name or flags - 名称或选项字符串列表,例如foo
或者-f, --foo
。
action - 当此参数为 在命令行中遇到。
创建自定义操作的推荐方法是扩展Action, 覆盖__call__
方法,并可选地覆盖__init__
和 format_usage
方法。
nargs - 应该使用的命令行参数的数量。
nargs
关键字参数将一个 不同数量的命令行参数。 支持者 值为: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'])
const - 某些操作和参数选择所需的常量值。.
default - 如果参数不在命令行,如果命名空间对象中不存在
如果default
值是一个字符串,则解析器会将该值视为 是一个命令行参数 特别是,分析器应用任何类型 转换参数(如果提供),然后再设置 Namespace返回值。 否则,解析器将按原样使用该值:
parser = argparse.ArgumentParser()
parser.add_argument('--length', default='10', type=int)
parser.add_argument('--width', default=10.5, type=int)
parser.parse_args()
Namespace(length=10, width=10.5)
type - 命令行参数应转换为的类型
choices - 参数允许值的序列
required - 是否可以省略命令行选项
一般来说,argparse模块假设像-f
和--bar
这样的标志 指示可选参数,这些参数在命令行中始终可以省略。 要使选项成为必需选项,可以为True
指定required=
add_argument()
的关键字参数:
parser = argparse.ArgumentParser()
parser.add_argument('--foo', required=True)
parser.parse_args(['--foo', 'BAR'])
parser.parse_args([])
输出的值为:
usage: [-h] --foo FOO
: error: the following arguments are required: --foo
help -参数作用的简要描述
help
值是一个字符串,包含参数的简要说明。 当用户请求帮助时(通常通过在 命令行),这些-h
描述将与每个 参数:
parser = argparse.ArgumentParser(prog='frobble')
parser.add_argument('--foo', action='store_true',
help='foo the bars before frobbling')
parser.add_argument('bar', nargs='+',
help='one of the bars to be frobbled')
parser.parse_args(['-h'])
输出值为:
usage: frobble [-h] [--foo] bar [bar ...]
positional arguments:
bar one of the bars to be frobbled
options:
-h, --help show this help message and exit
--foo foo the bars before frobbling
metavar - 使用消息中参数的名称。
dest - 要添加到返回的对象的属性的名称 。
nargs
关键字参数将一个 不同数量的命令行参数。 支持者 值为: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'])