Python命令列解析庫argparse

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.