argparser的用法

經過命令行運行Python腳本時,能夠經過ArgumentParser來高效地接受並解析命令行參數。python

一.流程正則表達式

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

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

二.建立 ArgumentParser() 對象bash

新建一個ArgumentParser類對象,而後來添加若干個參數選項,最後經過parse_args()方法解析並得到命令行傳來的參數。app

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()方法dom

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的得到則是將第一個短選項字符串前面的-字符去掉。任何內部的-將被轉換爲字符以確保字符串是合法的屬性名字。(即對於可選參數,先找長的選項字符串,再找短選項字符串,而且內部的-會被轉換爲字符。)ui

四.舉例this

舉例1spa

import argparse
 
parser = argparse.ArgumentParser()
parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.')
parser.add_argument('--seed', type=int, default=72, help='Random seed.')
parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')
 
args = parser.parse_args()
 
print(args.sparse)
print(args.seed)
print(args.epochs)

結果爲:命令行

/home/user/anaconda3/bin/python3.6 /home/user/lly/pyGAT-master/test.py
False
72
10000
 
Process finished with exit code 0

舉例2

1) 通常形式
可是大多數狀況下,腳本極可能須要多個參數,並且每次參數的類型用處各不相同,那麼這個時候在參數前添加標籤代表參數的類型和用途便十分有用,而利用argparse模塊能夠很方便得實現這一目的。
一樣用名爲test.py的腳本舉個栗子:

import argparse

parser = argparse.ArgumentParser(description="your script description")            # description參數能夠用於插入描述腳本用途的信息,能夠爲空
parser.add_argument('--verbose', '-v', action='store_true', help='verbose mode')   # 添加--verbose標籤,標籤別名能夠爲-v,這裏action的意思是當讀取的參數中出現--verbose/-v的時候
                                                                                   # 參數字典的verbose建對應的值爲True,而help參數用於描述--verbose參數的用途或意義。
args = parser.parse_args()                                                         # 將變量以標籤-值的字典形式存入args字典
if args.verbose:
    print "Verbose mode on!"
else:
    print "Verbose mode off!"

運行python test.py後面跟了--verbose/-v的時候會輸出前者,若是什麼都沒有會輸出後者。若是輸入了--verbose/-v之外的參數則會報錯:unrecognized arguments
稍微提一下,action參數表示值賦予鍵的方式,這裏用到的是bool類型;若是是'count'表示將--verbose標籤出現的次數做爲verbose的值;'append'表示將每次出現的該便籤後的值都存入同一個數組再賦值。(嘛,通常後面兩種用的比較少就很少說了)
PS:--help標籤在使用argparse模塊時會自動建立,所以通常狀況不須要咱們主動定義幫助信息。

$ python test.py --help
usage: test.py [-h] [--verbose]

your script description

optional arguments:
    -h, --help        show this help message and exit
    --verbose, -v     verbose mode

2) 必需參數
這種模式用於確保某些必需的參數有輸入。
parser.add_argument('--verbose', required=True, type=int)
required標籤就是說--verbose參數是必需的,而且類型爲int,輸入別的類型會報錯。

3)位置參數(positional arguments)
位置參數與sys.argv調用比較像,參數沒有顯式的--xxx或者-xxx標籤,所以調用屬性也與sys.argv相同。

parser.add_argument('filename')    # 輸入的第一個參數賦予名爲filename的鍵
args = parser.parse_args()
print "Read in %s" %(args.filename)

輸入python test.py test.txt則會輸出Read in test.txt
此外,能夠用nargs參數來限定輸入的位置參數的個數,默認爲1。固然nargs參數也可用於普通帶標籤的參數。
parser.add_argument('num', nargs=2, type=int)表示腳本能夠讀入兩個整數賦予num鍵(此時的值爲2個整數的數組)。nargs還能夠'*'用來表示若是有該位置參數輸入的話,以後全部的輸入都將做爲該位置參數的值;‘+’表示讀取至少1個該位置參數。'?'表示該位置參數要麼沒有,要麼就只要一個。(PS:跟正則表達式的符號用途一致。)好比用:

parser.add_argument('filename')
parser.add_argument('num', nargs='*) 

就能夠運行python test.py text.txt 1 2
因爲沒有標籤,因此用位置參數的時候須要比較當心。

4)輸入類型
以前已經提到了用type參數就能夠指定輸入的參數類型。而這個type類型還能夠表示文件操做的類型從而直接進行文件的讀寫操做。

parser.add_argument('file', type=argparser.FileType('r'))    # 讀取文件
args = parser.parse_args()
for line in args.file:
    print line.strip()

5)參數默認值
通常狀況下會設置一些默認參數從而不須要每次輸入某些不須要變更的參數,利用default參數便可實現。

parser.add_argument('filename', default='text.txt')

這個時候至直接運行python text.py就能獲得Read in text.txt而不須要輸入文件名了。

6)候選參數選擇
表示該參數能接受的值只能來自某幾個值候選值中,除此之外會報錯,用choices參數便可。好比:

parser.add_argument('filename', choices=['test1.txt', 'text2.txt'])
相關文章
相關標籤/搜索