Python 在写命令行脚本的时候,最直接的获取参数的方法是使用 sys.argv()
。html
但若是参数较多较复杂,且脚本会长期使用,或给别人使用。那么提供一套完整友好的命令行参数接口就比较可取了。python
argparse
包是标准包,提供参数解析、校验、默认值、提示、帮助等一系列功能。命令行
假设需求为一个以日期为参数的脚本,它容许参数为:code
'%Y-%m-%d'
格式的字符串,处理这个日期'%Y-%m-%d:%Y-%m-%d'
格式的字符串,处理日期区间例:orm
if __name__ == '__main__': yesterday = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime(DT_FORMAT) parser = argparse.ArgumentParser() parser.add_argument('date', nargs='?', default=yesterday, help='date, like "2016-08-18"') parser.add_argument('-r', '--range', help='date range, like "2016-08-18:2016-08-20"') args = parser.parse_args() if args.range: try: start, end = args.range.split(':') start_date = datetime.datetime.strptime(start, DT_FORMAT) end_date = datetime.datetime.strptime(end, DT_FORMAT) except ValueError as e: print(u'-r 参数错误:\n\t {}'.format(e)) parser.print_help() else: date = start_date while date <= end_date: main(date) date += datetime.timedelta(days=1) else: date = datetime.datetime.strptime(args.date, DT_FORMAT) main(date)
基本思路就是:htm
argparse.ArgumentParser
对象add_argument()
添加一系列参数规则parse_args()
获得参数,或打印异常信息重点在于 add_argument()
的各类参数用法:对象
date
),加两个短横线表示可选命名参数(如 --verbose
),加一个短横线表示可选命名参数的缩写版(如-v
)。nargs
参数,它指明参数数量,能够是 1,0 或者 ? 表示不定。--verbose
这种参数,正经常使用法都是后面什么都不接的,给出这个参数名就表明 true,不写就表明 false,该怎么处理呢。答案就是 action
参数,它表明当用户给出本参数名时应该采起的操做。以 --verbose
为例,能够设为 action='store_true'
,这样无论用户的 --vrebose
后面跟什么,跟不跟,args.verbose
的值都是 True
。不然当用户只写了可选命名参数的参数名,却没写值的时候,ArgumentParser 的默认作法是返回一个 None
。详参:接口
Tutorial
字符串
Reference
get