在python程序中,第一步就是获取参数,然后程序才能执行。对于简单的程序脚本,可以直接使用sys.argv[] 来获取命令行参数,但是应用到大的软件项目中,我们需要更加规范,更加方便而功能强大工具来处理命令行参数,本文主要介绍python标准库argparse的简单使用,详细方法及示例请参考python标准库
sys.argv[0] 为程序名称,其后分别为参数,len(sys.argv)可得出所有参数个数 python标准库中getopt, optparse, argparse都是专门处理命令行参数的模块 getopt 是类似UNIX系统getopt这个C函数的实现,可以处理长短配置项和参数。缺点有两个,一是长短配置项需要分开处理,二是对非法参数和必填参数的处理需要手动 optparse 比getopt 更加方便,强劲,采用声明式风格,还可以自动生成帮助信息 argparse 继承了optparse 的声明式风格的优点,又多了更丰富的功能,所以是现阶段最好用的参数处理标准库 docopt 是比前者更先进更易用的命令行参数处理器,甚至不用写代码,只要编写类似argparse 输出的帮助信息即可,因为其还不是标准库,所以现在主要学习argparse
argparse 解析命令行选项,参数以及子命令 argparse 可以帮助更方便的写出用户友好的命令行接口。程序定义它需要什么参数,argparse 解决如何解析这些来自sys.argv 的参数 argparse 同样自动生成帮助和使用说明信息并且当使用者给出错误参数时分发错误
#引入模块
import argparse
#构建ArgumentParser对象,用来保存解析命令行所得的信息
parser = argparse.ArgumentParser(description='Process some intergers.')
#调用add_argument() 告诉ArgumentParser对象如何处理命令行参数
parser.add_argument('intergers', metavar='N', type=int, nargs='+', help='an interger for the accumulator')
#调用parse_args() 来解析参数
args = parser.parse_args()
参数简介: description 给出一个简短的描述关于程序的使用说明,它出现在usage和帮助信息中间 epilog 在最后给出一个文件描述 add_help 是否加入-h –help选项,默认为True prefix_chars 命令行选项的前缀,默认为’-‘ fromfile_prefix_chars 从文件中获取参数信息 argument_default 设置参数的全局默认值 parents 包含进其他ArgumentParser对象的参数设置 conflict_handler 定义解决冲突选项的策略 formatter_class 自定义帮助输出的类,控制输出的格式 prog 程序的名字,默认为sys.argv[0] usage 描述程序使用说明
参数简介: name or flags 选项名字,可选参数以’-‘开始 action 遇到此名字的选项的动作 store 存储参数的值,默认即为此 store_const 存储为常量值 store_true(false) 存储布尔值 append 存入List append_const 存入List,且其值为常量 version 版本信息 nargs 参数的不同数量 N 整数,参数的个数 ? 匹配单个值
默认参数来自sys.argv 返回一个包含解析后的参数的namespace
子命令 即命令之下包含又一层命令 如:git add git checkout git push等 fileType对象 argument groups 参数分组 mutual exclusion parser defaults partial parsing parse_known_args()返回一个包含两个元素的元组,第一个是包含可选参数的namespace, 第二个是包含剩下的参数的list
### prog.py
import argparse
parser = argparse.ArgumentParser(description='An example about argparse')
parser.add_argument("-n", "--name", action="store", dest="name", default="hero", help="Get your name. [%(default)s]")
parser.add_argument("-a", "--age", action="store", dest="age", default="18", type=int, help="Get your age. [%(default)s]")
(para, args) = parser.parse_known_args()
print 'Hello, %s! You are %d years old. Welcome to my world!' % (para.name, para.age)
if len(args) != 0:
print 'Other parameters are ' + ' '.join(args)
python library reference 编写高质量代码:改善Python程序的91个建议