Python學習之Argparse 解析指令碼參數詳解

來源:互聯網
上載者:User

標籤:

Argparse 是 Python 標準庫中推薦的命令列解析模組,經常需要解析指令碼參數的話這是個方便的工具模組,擺脫萬年手動 system.argv 。本文和大家分享的就是python中Argparse解析指令碼參數相關內容,一起來看看吧,希望對大家學習python有所協助。
引入
import argparse
parser = argparse.ArgumentParser(description=’描述說明,可用於 Help 輸出說明’, add_help=True)
parser.parse_args()
ArgumentParser 選擇性參數如下:
· prog – 此指令碼程式名稱 (預設: sys.argv[0])
· usage – 用法說明 (預設: 根據參數自動產生)
· description – 指令碼說明
· epilog – 也是說明,在 help 輸出最後
· parents – 父 Parsers
· formatter_class – 輸出協助資訊的定製類
· prefix_chars – 可選首碼參數字元(設定後參數名稱需以此為首碼)
· fromfile_prefix_chars – 從檔案讀取可選首碼參數字元
· argument_default – 所有參數的預設值
· conflict_handler – 衝突處理器
· add_help – 是否添加協助
常用方法
add_argument()
// test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(’-p’, ’--param’)args = parser.parse_args()print args.param
運行 python test.py -p value or python test.py --param value 即可。
add_argument 可選方法參數如下:
· name or flags - 參數的名字.
· action - 遇到參數時的動作,預設值是 store。store_const,表示賦值為 const;append,將遇到的值儲存成列表,也就是如果參數重複則會儲存多個值; append_const,將參數規範中定義的一個值儲存到一個列表;count,儲存遇到的次數;此外,也可以繼承 argparse.Action 自訂參數解析;
· nargs - 參數的個數,可以是具體的數字,或者是 ? 號,當不指定值時對於 Positional argument 使用 default,對於 Optional argument 使用 const;或者是 * 號,表示 0 或多個參數;或者是 + 號表示 1 或多個參數.
· const - action 和 nargs 所需要的常量值.
· default - 不指定參數時的預設值.
· type - 參數的類型. 如 int、str
· choices - 參數允許的值. 如:[‘a’, ‘b’, ‘c’]
· required - 選擇性參數是否可以省略(僅針對 optionals ).
· help - 參數的協助資訊,當指定為 argparse.SUPPRESS 時表示不顯示該參數的協助資訊.
· metavar - 在usage說明中的參數名稱,對於必選參數預設就是參數名稱,對於選擇性參數預設是全大寫的參數名稱.
· dest - 解析後的參數名稱,預設情況下,對於選擇性參數選取最長的名稱,中劃線轉換為底線.
add_mutually_exclusive_group()
設定衝突參數,當需要設定指定輸入參數只能包含其中一個時即可用此方法。
// test.py
parse = argparse.ArgumentParser()group = parse.add_mutually_exclusive_group()group.add_argument("-a", action="store_true")group.add_argument("-b", action="store_true")
args = parse.parse_args()
此種情形下 test.py 輸入參數只能包含 a 或 b, a、b 不能同時存在。
add_argument_group()
參數分組設定。當有分組命令的需求時可用,輸入參數將歸於所屬分組下。
parse = argparse.ArgumentParser()
some_group = parse.add_argument_group(’Publish plugin’)
some_group.add_argument(’-f’  type=str)
add_subparsers()
子命令模式,類似 git commit 、 git push 等命令.
parse = argparse.ArgumentParser()sub_parse = parse.add_subparsers()# sub_parse opt...
Sample
下面由一個使用情境說起。一個指令碼: publish.py ,包含兩個功能:發布和查詢,運行環境有測試服和正式服,發布時需要兩個帳號系統的密碼,查詢時需要一個帳號系統的密碼和版本、渠道參數。那麼指令碼如下,其它見注釋:
// publish.py
import argparse
def get_args():
parse = argparse.ArgumentParser(description=’Publish tools.’, add_help=True)
# 操作輸入,使用互斥參數並且參數必須輸入且只能選一個
group = parse.add_mutually_exclusive_group(required=True)
# 查詢操作
group.add_argument("-s", "--Search", action="store_true")
# 發佈動作
group.add_argument("-p", "--Publish", action="store_true")
# 運行環境參數
parse.add_argument(’-e’, ’--Env’, type=str, help=’Running environment’, choices=[’test’, ’product’], default=’test’)
# 帳號必選資訊
parse.add_argument(’-a’, ’--ApiAuth’, required=True, type=str, help=’username:password’)
# 發布分組命令設定
publish_group = parse.add_argument_group(’Publish’)
publish_group.add_argument(’-f’, ’--FtpAuth’,  type=str, help=’username:password’)
# 查詢分組命令設定
search_group = parse.add_argument_group(’Search’)
search_group.add_argument(’-c’, ’--channel’, type=str, help=’channel’)
search_group.add_argument(’-v’, ’--versonCode’, type=int, help=’Search verson code’)
args = parse.parse_args()
return vars(args)
args=get_args()print ’opt search?:’, args[’Search’],’ opt publish?:’, args[’Publish’], ’\n’, args
publish.py -h 使用協助如下:
usage: test.py [-h] (-s | -p) [-e {test,product}] -a APIAUTH [-f FTPAUTH]
[-c CHANNEL] [-v HOSTVERSONCODE]
Publish tools.
optional arguments:
-h, --help            show this help message and exit
-s, --Search
-p, --Publish
-e {test,product}, --Env {test,product}
Running environment
-a APIAUTH, --ApiAuth APIAUTH
username:password
Publish plugin:
-f FTPAUTH, --FtpAuth FTPAUTH
username:password
Search plugin:
-c CHANNEL, --channel CHANNEL
channel
-v VERSONCODE, --VersonCode VERSONCODE
Search verson code
使用如下:
# 1 publish
python publish.py -p -a U -f U# 2 search
python publish.py -s -a U -c channel -v 100


來源:Rocko’s blog

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.