標籤:python 庫 管理 parse
python標準庫推薦使用argparse模組對命令列進行解析。
建立解析器
import argparseparser = argparse.ArgumentParser()
建立一個ArgumentParser執行個體對象,ArgumentParser對象的參數都為關鍵字參數。
class ArgumentParser (prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)
prog :程式的名字,預設為sys.argv[0],用來在help資訊中描述程式的名稱。
usage :描述程式用途的字串。
description :help資訊前的文字。
epilog :help資訊之後的資訊。
parents :由ArgumentParser對象組成的列表,它們的arguments選項會被包含到新ArgumentParser對象中。
formatter_class :help資訊輸出的格式。
prefix_chars :參數首碼,預設為‘-‘。
fromfile_prefix_chars :前置詞字元,放在檔案名稱之前。
argument_default :參數的全域預設值。
conflict_handler :解決衝突的策略,預設情況下衝突會發生錯誤。
add_help :設為False時,help資訊裡面不再顯示-h --help資訊。
#-*- coding:utf-8 -*-import argparseparser = argparse.ArgumentParser()'''parser = argparse.ArgumentParser(prog='myprogram')parser.print_help()#輸出=> usage: myprogram [-h]''''''parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]')parser.add_argument('--foo', nargs='?', help='foo help')parser.add_argument('bar', nargs='+', help='bar help')parser.print_help()#usage :描述程式用途的字串''''''parser = argparse.ArgumentParser(description='A foo that bars',epilog="And that's how you'd foo a bar")parser.print_help()#description :help資訊前的文字。#epilog :help資訊之後的資訊。''''''parent_parser = argparse.ArgumentParser(add_help=False)parent_parser.add_argument('--parent', type=int)foo_parser = argparse.ArgumentParser(parents=[parent_parser])foo_parser.add_argument('foo')print foo_parser.parse_args(['--parent', '2', 'XXX'])#parents :由ArgumentParser對象組成的列表,它們的arguments選項會被包含到新ArgumentParser對象中。''''''parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')parser.add_argument('+f')parser.add_argument('++bar')print parser.parse_args('+f X ++bar Y'.split())#'+f X ++bar Y'.split()等價於['+f', 'X', '++bar', 'Y']#prefix_chars :參數首碼,預設為'-'''''''#with as上下文管理器#當參數過多時,可以將參數放到檔案中讀取#例子中parser.parse_args(['-f', 'foo', '@args.txt'])解析時會從檔案args.txt讀取,相當於 ['-f', 'foo', '-f', 'bar']。with open('args.txt', 'w') as fp: fp.write('-f\nbar') #將 -f 和 bar 寫入檔案中parser = argparse.ArgumentParser(fromfile_prefix_chars='@')parser.add_argument('-f')print parser.parse_args(['-f', 'foo', '@args.txt'])''''''#禁止parse_args時的參數預設添加parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS)parser.add_argument('--foo')parser.add_argument('bar', nargs='?')print parser.parse_args(['--foo', '1', 'BAR'])print parser.parse_args()#argument_default :參數的全域預設值''''''#conflict_handler :解決衝突的策略,預設情況下衝突會發生錯誤#正常參數衝突的時候會報ArgumentError錯,設定conflict_handler='resolve'之後會自動解決衝突parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve')parser.add_argument('-f', '--foo', help='old foo help')parser.add_argument('--foo', help='new foo help')parser.print_help()'''
添加參數選項
add_argument (name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator')parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=ma
name or flags :參數有兩種,選擇性參數和位置參數。
action: 預設為store
action的參數可以為:store_const,值存放在const中、store_true和store_false,值存為True或False、append:存為列表、append_const:存為列表,會根據const關鍵參數進行添加、count:統計參數出現的次數、help:help資訊、version:版本。
nrgs: 參數的數量
值可以為整數N(N個),*(任意多個),+(一個或更多),值為?時,首先從命令列獲得參數,若沒有則從const獲得,然後從default獲得。
const :儲存一個常量
default :預設值
type :參數類型
choices :可供選擇的值
required :是否必選
desk :可作為參數名
#添加選擇性參數parser.add_argument('-f', '--foo')#添加位置參數parser.add_argument('bar')#action: 預設為store#store_const,值存放在const中parser = argparse.ArgumentParser()>>> parser.add_argument('--foo', action='store_const', const=42)#store_true和store_false,值存為True或Falseparser.add_argument('--foo', action='store_true')parser.add_argument('--bar', action='store_false')#append:存為列表parser.add_argument('--foo', action='append')parser.parse_args('--foo 1 --foo 2'.split())#append_const:存為列表,會根據const關鍵參數進行添加parser.add_argument('--str', dest='types', action='append_const', const=str)parser.add_argument('--int', dest='types', action='append_const', const=int)#count:統計參數出現的次數parser.add_argument('--verbose', '-v', action='count')#nrgs: 參數的數量#值可以為整數N(N個),*(任意多個),+(一個或更多)parser.add_argument('bax', nargs=5)parser.add_argument('bay', nargs='+')parser.add_argument('baz', nargs='*')#值為?時,首先從命令列獲得參數,若沒有則從const獲得,然後從default獲得parser.add_argument('--foo', nargs='?', const='c', default='d')
解析參數
#參數有幾種寫法#空格分開parser = argparse.ArgumentParser(prog='PROG')parser.add_argument('-x')parser.add_argument('--foo')print parser.parse_args('-x X'.split())print parser.parse_args('--foo FOO'.split())#長選項用=分開print parser.parse_args('--boo=BOO'.split())#短選項可以寫在一起print parser.parse_args('-zZ'.split())#parse_args()方法的傳回值為namespace,可以用vars()內建函數化為字典parser.add_argument('--doo')args = parser.parse_args(['--doo', 'BAR'])print vars(args)
Python命令列解析庫argparse