1. 程式人生 > >python3中argparse模組

python3中argparse模組

1、定義:argparse是python標準庫裡面用來處理命令列引數的庫

2、命令列引數分為位置引數和選項引數:

        位置引數就是程式根據該引數出現的位置來確定的

                如:[[email protected]_1 /]# ls root/    #其中root/是位置引數

        選項引數是應用程式已經提前定義好的引數,不是隨意指定的

                如:[[email protected]_1 /]# ls -l    # -l 就是ls命令裡的一個選項引數

 3、使用步驟:

(1)import argparse    首先匯入模組

(2)parser = argparse.ArgumentParser()    建立一個解析物件

(3)parser.add_argument()    向該物件中新增你要關注的命令列引數和選項

(4)parser.parse_args()    進行解析

 4、argparse.ArgumentParser()方法引數須知:一般我們只選擇用description

 prog=None     - 程式名

         description=None,    - help時顯示的開始文字

          epilog=None,     - help時顯示的結尾文字

         parents=[],        -若與其他引數的一些內容一樣,可以繼承

         formatter_class=argparse.HelpFormatter,     - 自定義幫助資訊的格式

         prefix_chars='-',    - 命令的字首,預設是‘-’

         fromfile_prefix_chars=None,     - 命令列引數從檔案中讀取

         argument_default=None,    - 設定一個全域性的選項預設值,一般每個選項單獨設定

         conflict_handler='error',     - 定義兩個add_argument中新增的選項名字發生衝突時怎麼處理,預設處理是丟擲異常

         add_help=True    - 是否增加-h/--help選項,預設是True)

 5、add_argument()方法引數須知:

  name or flags...    - 必選,指定引數的形式,一般寫兩個,一個短引數,一個長引數

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo')     # add_argument()指定程式可以接受的命令列選項
args = parser.parse_args()      # parse_args()從指定的選項中返回一些資料
print(args)
print(args.echo)

結果:

G:\flower\python\arg_parse>python demo1.py foo

Namespace(echo='foo')

foo

 action 表示值賦予鍵的方式,這裡用到的是bool型別,action意思是當讀取的引數中出現指定引數的時候的行為

help 可以寫幫助資訊 

parser = argparse.ArgumentParser(description = 'this is a description')
parser.add_argument('--ver', '-v', action = 'store_true', help = 'hahaha')
# 將變數以標籤-值的字典形式存入args字典
args = parser.parse_args()
if args.ver:
    print("Ture")
else:
    print("False")

結果:

G:\flower\python\arg_parse>python demo1.py -v

Ture

G:\flower\python\arg_parse>python demo1.py -j

usage: demo1.py [-h] [--ver]

demo1.py: error: unrecognized arguments: -j

   required    - 必需引數,通常-f這樣的選項是可選的,但是如果required=True那麼就是必須的了

 type   - 指定引數型別

# required標籤就是說--ver引數是必需的,並且型別為int,輸入其它型別會報錯
parser.add_argument('--ver', '-v', required = True, type = int)

結果:

G:\flower\python\arg_parse>python demo1.py -v 1

Ture

G:\flower\python\arg_parse>python demo1.py -v ss

usage: demo1.py [-h] --ver VER

demo1.py: error: argument --ver/-v: invalid int value: 'ss'

  choices    - 設定引數的範圍,如果choice中的型別不是字串,要指定type

表示該引數能接受的值只能來自某幾個值候選值中,除此之外會報錯,用choice引數即可

parser.add_argument('file', choices = ['test1', 'test2'])
args = parser.parse_args()
print('read in %s'%(args.file))

結果:

G:\flower\python\arg_parse>python demo1.py test1

read in test1

 nargs    - 指定這個引數後面的value有多少個,預設為1

# 表示指令碼可以讀入兩個整數賦予num鍵(此時的值為2個整數的陣列)
parser.add_argument('filename', nargs = 2, type = int)
args = parser.parse_args()
print('read in %s'%(args.filename))

結果:

G:\flower\python\arg_parse>python demo1.py 1 2 3

usage: demo1.py [-h] filename filename

demo1.py: error: unrecognized arguments: 3

分析:nargs還可以'*'用來表示如果有該位置引數輸入的話,之後所有的輸入都將作為該位置引數的值;‘+’表示讀取至少1個該位置引數。'?'表示該位置引數要麼沒有,要麼就只要一個。(PS:跟正則表示式的符號用途一致。)

如:

parser.add_argument('filename', nargs = '+', type = int)
args = parser.parse_args()
print('read in %s'%(args.filename))

  dest   - 設定這個選項的value解析出來後放到哪個屬性中

parser.add_argument('-file', choices = ['test1', 'test2'], dest = 'world')
args = parser.parse_args()
print('read in %s'%(args.world))

結果:

G:\flower\python\arg_parse>python demo1.py -file test1

read in test1

以上