Python命令行參數解析模塊argparse


前言

更多內容,請訪問我的 個人博客


以前 optparse 比較火,但是在python2.7版本后,官方不再維護這個模塊,轉而大力支持 argparse

argparse 模塊可以讓人輕松編寫用戶友好的命令行接口。她可以從 sys.argv 中解析出參數,並自動生成幫助和使用手冊,還能在傳入無效參數時報出錯誤信息。

基礎用法

由於是標准庫,所以不需要安裝,直接使用:

import argparse
parser = argparse.ArgumentParser()
# parser.add_argument("-i", "--info", action = "store", type = "string", dest = "sample_info", help = "the sample information") args = parser.parse_args() # print(args.sample_info) 

運行以上代碼,如下:

  • 不輸入參數,也沒有輸出結果:
    $ python3 test.py
    
  • 輸入默認參數 --help (也可縮寫為 -h ),會輸出自動生成的幫助信息:
    $ python3 test.py --help # 輸出: usage: test.py [-h] optional arguments: -h, --help show this help message and exit 
  • 輸入錯誤參數,會輸出報錯信息:
    $ python3 test.py -verbose
    
    # 輸出: usage: test.py [-h] test.py: error: unrecognized arguments: --verbose 

創建解析器

使用 argparse 的第一步是創建一個 ArgumentParser 對象,如下:

import argparse parser = argparse.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, allow_abbrev=True) 

創建一個新的 ArgumentParser 對象。所有的參數都應當作為關鍵字參數傳入。部分參數在下面都有它更詳細的描述,但簡而言之,它們是:

  • prog - 程序的名稱(默認:sys.argv[0])
  • usage - 描述程序用途的字符串(默認值:從添加到解析器的參數生成)
  • description - 在參數幫助文檔之前顯示的文本(默認值:無)
  • epilog - 在參數幫助文檔之后顯示的文本(默認值:無)
  • parents - 一個 ArgumentParser 對象的列表,它們的參數也應包含在內
  • formatter_class - 用於自定義幫助文檔輸出格式的類
  • prefix_chars - 可選參數的前綴字符集合(默認值:'-')
  • fromfile_prefix_chars - 當需要從文件中讀取其他參數時,用於標識文件名的前綴字符集合(默認值:None)
  • argument_default - 參數的全局默認值(默認值: None)
  • conflict_handler - 解決沖突選項的策略(通常是不必要的)
  • add_help - 為解析器添加一個 -h/--help 選項(默認值: True)
  • allow_abbrev - 如果縮寫是無歧義的,則允許縮寫長選項 (默認值:True)
prog

默認情況下, ArgumentParser 對象在幫助消息中顯示的程序名稱是 sys.argv[0] 。若要自定義程序名,則使用 prog ,如下:

>>> parser = argparse.ArgumentParser(prog='myprogram') >>> parser.print_help() usage: myprogram [-h] optional arguments: -h, --help show this help message and exit 

無論是從 sys.argv[0] 或是從 prog= 參數確定的程序名稱,都可以在幫助消息里通過 %(prog)s 格式串來引用,如下:

>>> parser = argparse.ArgumentParser(prog='myprogram') >>> parser.add_argument('--foo', help='foo of the %(prog)s program') >>> parser.print_help() usage: myprogram [-h] [--foo FOO] optional arguments: -h, --help show this help message and exit --foo FOO foo of the myprogram program 
usage

構建用法消息,如下:

>>> 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: PROG [options] positional arguments: bar bar help optional arguments: -h, --help show this help message and exit --foo [FOO] foo help 
description

簡要描述這個程度做什么以及怎么做。在幫助消息中,這個描述會顯示在命令行用法字符串和各種參數的幫助消息之間,如下:

>>> parser = argparse.ArgumentParser(description='A foo that bars') >>> parser.print_help() usage: argparse.py [-h] A foo that bars optional arguments: -h, --help show this help message and exit 
epilog

一些程序喜歡在 description 參數后顯示額外的對程序的描述,如下:

>>> parser = argparse.ArgumentParser( ... description='A foo that bars', ... epilog="And that's how you'd foo a bar") >>> parser.print_help() usage: argparse.py [-h] A foo that bars optional arguments: -h, --help show this help message and exit And that's how you'd foo a bar 
add_help

是否關閉自動生成的幫助信息,如下:

>>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) >>> parser.add_argument('--foo', help='foo help') >>> parser.print_help() usage: PROG [--foo FOO] optional arguments: --foo FOO foo help 

添加參數

使用 add_argument() 方法添加參數。其中,部分參數在下面都有它更詳細的描述,但簡而言之,它們是:

  • name or flags - 一個命名或者一個選項字符串的列表,例如 foo 或 -f, --foo。
  • action - 當參數在命令行中出現時使用的動作基本類型。
  • nargs - 命令行參數應當消耗的數目。
  • const - 被一些 action 和 nargs 選擇所需求的常數。
  • default - 當參數未在命令行中出現時使用的值。
  • type - 命令行參數應當被轉換成的類型。
  • choices - 可用的參數的容器。
  • required - 此命令行選項是否可省略 (僅選項可用)。
  • help - 一個此選項作用的簡單描述。
  • metavar - 在使用方法消息中使用的參數值示例。
  • dest - 被添加到 parse_args() 所返回對象上的屬性名。
name or flags

第一個傳遞給 add_argument() 的參數必須是一系列 flags 或者是一個簡單的參數名,如下:

>>> parser.add_argument('-f', '--foo') or >>> parser.add_argument('bar') 
action
  • store - 存儲參數的值。這是默認的動作。如下:
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo') >>> parser.parse_args('--foo 1'.split()) Namespace(foo='1') 
  • store_const - 存儲被 const 命名參數指定的值。 store_const 動作通常用在選項中來指定一些標志。如下:
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_const', const=42) >>> parser.parse_args(['--foo']) Namespace(foo=42) 
  • store_truestore_false - 這些是 store_const 分別用作存儲 TrueFalse 值的特殊用例。另外,它們的默認值分別為 FalseTrue。如下:
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_true') >>> parser.add_argument('--bar', action='store_false') >>> parser.add_argument('--baz', action='store_false') >>> parser.parse_args('--foo --bar'.split()) Namespace(foo=True, bar=False, baz=True) 
  • append - 存儲一個列表,並且將每個參數值追加到列表中。在允許多次使用選項時很有用。如下:
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='append') >>> parser.parse_args('--foo 1 --foo 2'.split()) Namespace(foo=['1', '2']) 
  • count - 計算一個關鍵字參數出現的數目或次數。例如,對於一個增長的詳情等級來說有用。如下:
>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--verbose', '-v', action='count') >>> parser.parse_args(['-vvv']) Namespace(verbose=3) 
  • version - 期望有一個 version= 命名參數在 add_argument() 調用中,並打印版本信息並在調用后退出。如下:
>>> import argparse >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('--version', action='version', version='%(prog)s 2.0') >>> parser.parse_args(['--version']) PROG 2.0



作者:潘高PG


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM