python argv.py 1 2 3
其中1 2 3
就是传递给 argv.py 的命令行参数,也就是说命令行参数是调用某个程序时除程序名外的其他参数。
图1:Python 命令行参数解析模块
模块 | 描述 |
---|---|
sys.argv | sys.argv 模块传入参数的方式比较简单,功能也比较少,该模块比较适合参数数量很少且固定的脚本。 |
argparse | argparse 模块可以让开发人员轻松地编写用户友好的命令行接口,argparse 模块会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。 |
getopt | getopt 模块相比 sys.argv 模块,支持长参数和短参数,以及对参数解析赋值,有很多的高级用法,因此掌握 getopt 模块相对复杂,学习成本高。 |
click | click 模块相比其他模块的优势就是支持多个命令的嵌套和组合,可以快速构建命令行程序,但是在扩展性上就没有 argparse 模块好,需要额外安装除 click 模块以外的第三方模块。 |
parse = argparse.ArgumentParser(prog='argument.py',description='编写命令行的示例文件')
ArgumentParser() 方法其他参数如表2所示其中大部分参数不常用到。参数 | 描述 |
---|---|
prog | 程序名,默认为 sys.argv[0]。 |
usage | 描述程序用途的字符串,默认值从添加到解析器的参数生成。 |
description | 在参数帮助文档之前显示的文本。 |
parents | 一个 ArgumentParser 对象的列表,它们的参数应包含在内。 |
formatter_class | 用于自定义帮助文档输出格式的类。 |
prefix_chars |
可选参数的前缀字符集合,默认为- 。 |
fromfile_prefix_chars | 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合。 |
argument_default | 参数的全局默认值。 |
conflict_handler | 解决冲突选项的策略(通常不必要)。 |
add_help |
为解析器添加一个-h/--help 选项,默认为 True。 |
allow_abbrev | 如果缩写是无歧义的,则允许缩写长选项,默认为 True。 |
parse.add_argument('name',type=str,help='名字') # 添加位置参数(必选) parse.add_argument('age',type=int,help='年龄') # 添加位置参数(必选) parse.add_argument('-s',dest='--sex',type=str,help='性别') # 添加可选参数其中,add_argument() 方法更多的可选参数如表3所示。
参数 | 描述 |
---|---|
name or flags | 选项字符串的名字或者列表,如 foo、-f 或 --foo。 |
action | 在命令行使用该参数时采取的基本动作类型。 |
nargs | 应该读取的命令行参数数量。 |
const | 某些 action 和 nargs 要求的常数值。 |
default | 如果命令行中没有出现该参数时,该参数的默认值。 |
type | 命令行参数应该转换的类型。 |
choices | 参数可允许的值的容器。 |
required | 表示该命令行参数是否可以省略(只针对可选参数)。 |
help | 参数的简短描述。 |
metavar | 参数在帮助信息中的名称。 |
dest | 给 parse_args() 返回的对象要添加的属性名称。 |
parser.add_argument('param')
这样就定义了一个名为 param 的参数,我们可以通过 args.param 来访问它。假设需要运行的程序名称为 test.py,那么我们直接执行以下命令即可:python test.py xxx
其中必选参数直接传入,不需要加上前缀。-
或--
。parser.add_argument('-param', '--param')
如果要给这个可选参数一个解释或提示,方便其他人理解这个参数,那么我们可以加 help,示例如下:parser.add_argument('-param', '--param', help='this is a param of name')
parser.add_argument('-param', '--param', default=3, help='this is a param of num')
parser.add_argument('-param', '--param', default=3,type=int, help='this is a param of num')
parser.add_argument('-param', '--param', default=3, choices=[2,3,4], type=int, help='this is a param of num')
+
表示传入至少1个参数;2
表示必须传入2个参数,在程序运行时,这2个参数的值会以列表的形式赋给 param。
parser.add_argument('-param', '--param', nargs=2, type=int, help='this is a param of num')
parser.add_argument('-param', '--param', dest = 'port') args = parser.parse_args() server_port = args.port # 通过dest参数指定的port获取。
ArgumentParser.parse_args(args=None, namespace=None)
其中,args 表示要解析的字符串列表,默认值从 sys.argv 获取;namespace 用于获取属性的对象,默认值是一个新的空 Namespace 对象。=
分隔它们;对于短参数,参数和参数值可以拼接在一起。parser = argparse.ArgumentParser(prog='PROG') parser.add_argument('-x') parser.add_argument('--foo') parser.add_argument('bar') print(parser.parse_args(['--foo=FOO', '-xX', 'bar']))另外,当短参数看起来像负数时,解析器会将命令行中所有的负数参数解析为短参数。
-
开头。如果必须使用以-
开头的位置参数,我们可以插入伪参数--
告诉 parse_args() 在那之后的内容是位置参数。示例如下:
parser = argparse.ArgumentParser(prog='PROG') parser.add_argument('-1', dest='one') parser.add_argument('foo', nargs=1) parser.add_argument('bar', nargs=1) print(parser.parse_args(['-1', 'X', '--', '-2', '-3']))图2中展示的是一个综合示例,演示了一个简单登录的验证和提示语。
图2:Python 命令行参数解析综合示例
本文链接:http://task.lmcjl.com/news/14429.html