python中的argparse模塊使用


argparse是python用於解析命令行參數和選項的標准模塊,類似於linux中的ls指令,后面可以跟着不同的參數選項以實現不同的功能,argparse就可以解析命令行然后執行相應的操作。

argparse 使用

使用argparse 配置命令行參數時,需要三步:

  1. 創建 ArgumentParser() 對象
  2. 調用 add_argument() 方法添加參數
  3. 使用 parse_args() 解析添加的參數
    parser = argparse.ArgumentParser()

    parser.add_argument("-p", "--port",
        dest='port',
        default="/dev/ttyUSB0",
        help="serial port where the MCU is connected to.)

    parser.add_argument("-v", "--version",
        dest='version',
        action='store_true',
        help="show the version number of this program and exit.")

    args = parser.parse_args()

 

某些情況下,你想將參數按照功能進行概念分組,以便用戶方便使用,比如寫操作的參數作為一個組,讀操作的參數作為一個組,可以使用 ArgumentParser.add_argument_group(title=None, description=None) 定義一個組。

1     info_group = parser.add_argument_group('Device information')
2     read_group = parser.add_argument_group('Read and compare functions')
3     write_group = parser.add_argument_group('Erase and write functions')
4     run_group = parser.add_argument_group('Code execution functions')

 

方法參數查找表

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=關鍵字參數達到。



免責聲明!

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



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