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