天天看點

python之argparse子產品

argparse 子產品使編寫使用者友好的指令行界面變得更容易.程式隻需定義好它要求的參數,然後argparse将負責如何從sys.argv中解析出這些參數。argparse子產品還會自動生成幫助和使用資訊并且當使用者賦給程式非法的參數時産生錯誤資訊。

1.ArgumentParser類

class 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)

參數:

  • prog:程式的名字
  • usage:預設情況下,ArgumentParser依據它包含的參數計算出幫助資訊
  • description:這個參數給出程式做什麼以及如何工作的簡短描述
  • epilog:顯示額外的關于程式的描述
  • parents:有時候,幾個解析器會共享一個共同的參數集。可以使用一個帶有所有共享參數的解析器傳遞給ArgumentParser的parents=參數,而不用重複定義這些參數
  • formatter_class:ArgumentParser對象允許通過指定一個格式化類來定制幫助資訊的格式(argparse.RawDescriptionHelpFormatter、argparse.RawTextHelpFormatter、argparse.ArgumentDefaultsHelpFormatter、argparse.MetavarTypeHelpFormatter)
  • prefix_chars:修改字首符
  • fromfile_prefix_chars:以任意一個給定字元開始的參數将被當做檔案,并且将被這些檔案包含的參數替換
  • argument_default:指定一個解析器範圍的參數預設值
  • allow_abbrev:允許使用縮寫(預設)
  • conflict_handler:關于設定同一個選項具有兩個動作
  • add_help

2.ArgumentParser對象add_argument()方法

ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

參數

  • name or flags:傳遞給add_argument() 的第一個參數是以必須是一個标記序列或者一個簡單的參數名字
  • action:指出應該如何處理指令行參數(支援的操作:’store’ ,’store_const’,’store_true’,’store_false’,’append’,’append_const’,’count’,’help’,’version’)
  • nargs:将一個動作與不同數目的指令行參數關聯在一起(支援的值:N,’?’,’*’,’+’)
  • const:用于儲存常量值,它們不是從指令行讀入但是是ArgumentParser 的動作所要求的
  • default:其預設值為None,指出如果指令行參數沒有出現時它們應該是什麼值
  • type:允許任意必要的類型檢查并作類型轉換
  • choices:某些指令行參數應該從一個受限的集合中選擇
  • required:如果要使得選項是必需的,可以指定True作為required=關鍵字參數的值給add_argument()
  • help:包含參數簡短描述的字元串
  • metavar:預設情況下,對于位置參數直接使用dest的值,對于可選參數則将dest的值變為大寫。注意metavar隻會改變顯示出來的名字parse_args() 對象中屬性的名字仍然由dest的值決定。
  • dest:對于位置參數的動作,dest 通常作為第一個參數提供給add_argument(),對于可選參數的動作,dest的動作通常從選項字元串推導出來,如:ArgumentParser生成的dest的值是将第一個長的選項字元串前面的–字元串去掉。如果沒有提供長選項字元串,dest的獲得則是将第一個短選項字元串前面的-字元去掉。任何内部的-将被轉換為字元以確定字元串是合法的屬性名字。(即對于可選參數,先找長的選項字元串,再找短選項字元串,并且内部的-會被轉換為字元。)

Action類

class argparse.Action(option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None)

3.ArgumentParser對象parse_args()方法

将參數字元串轉換成對象并設定成命名空間的屬性。傳回構成的命名空間。

之前對add_argument() 的調用完全決定了建立什麼對象以及如何設定。

選項值文法,parse_args()方法支援幾種指定一個選項的值的方法:

  • 最簡單的方法是,将選項和它的值以兩個分開的參數傳遞
  • 對于長選項(名字長度超過一個字元的選項),選項和它的值還可以用一個單一的指令行參數傳遞,并用=分隔它們
  • 對于短選項(長度隻有一個字元的選項),選項及其值可以連在一起
  • 幾個短選項可以連在一起僅使用一個-字首,隻要隻有最後一個選項要求有值或者都不要有值

無效參數

在解析指令行的同時,parse_args()會檢查各種錯誤,包括有歧義的選項、不合法的類型、不合法的選項、錯誤的位置參數個數等等。當它遇到此類錯誤時,會退出并跟随用法資訊一起列印出錯誤。

參數包含“ - ”

parse_args()方法每當使用者犯了明确的錯誤時會努力給出錯誤資訊,但是有些情況天生就有歧義。例如,指令行參數-1既可以是想指明一個選項也可以是想提供一個位置參數。這裡parse_args()會非常小心:位置參數隻有在它們看上去像負數且解析器中沒有選項看上去是負數時才可以以-開始。

如果你有必須以- 開始的位置參數且不是負數,你可以插入僞參數’–’告訴parse_args()其後的所有内容都為位置參數。

參數縮寫(字首比對)

參數不來自sys.argv

有時候可能需要ArgumentParser解析的參數不是來自sys.argv。這可以通過傳遞一個字元串清單給parse_args()來完成

4.class argparse.Namespace

parse_args() 預設使用的簡單的類,用于建立一個儲存屬性的對象并傳回該對象。

有時可能需要讓ArgumentParser配置設定屬性給一個已經存在的對象而不是一個新的Namespace對象。這可以通過指定namespace=關鍵字參數達到。

其它實用工具

ArgumentParser.add_subparsers([title][, description][, prog][, parser_class][, action][, option_string][, dest][, help][, metavar])

class argparse.FileType(mode=’r’, bufsize=-1, encoding=None, errors=None)

ArgumentParser.add_argument_group(title=None, description=None)

ArgumentParser.add_mutually_exclusive_group(required=False)ArgumentParser.set_defaults(**kwargs)

列印幫助

  • ArgumentParser.print_usage(file=None)
  • ArgumentParser.print_help(file=None)
  • ArgumentParser.format_usage()
  • ArgumentParser.format_help()

ArgumentParser.parse_known_args(args=None, namespace=None)

ArgumentParser.convert_arg_line_to_args(arg_line)

ArgumentParser.exit(status=0, message=None)

ArgumentParser.error(message)