1. 程式人生 > >Python命令列解析器argparse的使用

Python命令列解析器argparse的使用

argparse是Python內建的一個用於命令項選項與引數解析的模組,在編寫指令碼的過程中是非常常用的。 在其使用中主要包含三個步驟:

import argparse


parser = argparse.ArgumentParser(description='this is a process for read file')
parser.add_argument('fileinPath', help='path to input file')
parser.add_argument('fileoutPath', help='path to output file')
args = parser.
parse_args()

而當如上定義後,即可在需要用到引數的地方呼叫args.fileinPathargs.fileoutPath。下面詳細講解一下add_argument()方法。

add_argument()方法

位置引數

位置引數是必選引數,如果命令列解析不到就會報錯,上面例子中兩個引數都是位置引數。

可選引數

可選引數可以填寫兩種,長的可選引數以及短的,並且可以並存,會首先解析長可選引數。如:

parser.add_argument('-s', '--square', help='display a square of a given number', type=int)

當然在一個指令碼中,位置引數與可選引數是可以並存的。

一個例子

給一個整數序列,輸出它們的和或最大值(預設)

import argparse


parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const'
, const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers))

則在呼叫的時候:

>>> python test.py
usage: test.py [-h] [--sum] N [N ...]
test.py: error: the following arguments are required: N
>>> python test.py -h
usage: test.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:
  N           an integer for the accumulator

optional arguments:
  -h, --help  show this help message and exit
  --sum       sum the integers (default: find the max)
>>> python test.py 1 2 3 4
4
>>> python test.py 1 2 3 4 --sum
10

所有引數

  • name or flags - 選項字串的名字或者列表,例如foo或者-f--foo
  • action - 命令列遇到引數時的動作,預設值是store
    • store_const,表示賦值為const。意思為如果能解析到該引數,則該引數賦值為const的值,見上個例子;
    • store_truestore_false,引數預設值分別為FalseTrue。意思為如果能解析到該引數,則引數值分別改為TrueFalse
    • append,將遇到的值儲存成list,也就是如果引數重複則會儲存多個值。如:
      >>> import argparse
      >>> parser = argparse.ArgumentParser()
      >>> parser.add_argument('--foo', action='append', type=int)
      >>> parser.parse_args('--foo 1 --foo 2'.split())
      Namespace(foo = [1, 2])
      
    • append_const,將固定值儲存成一個list。意思為如果能解析道該引數,則list將會append一個const進來。如:
      import argparse
      
      parser = argparse.ArgumentParser()
      parser.add_argument('--str', dest='types', action='append_const', const=str)
      parser.add_argument('--int', dest='types', action='append_const', const=int)
      args = parser.parse_args()
      
      print(args)
      
      在命令列:
      >>> python test.py --str --str --int
      Namespace(types=[<class 'str'>, <class 'str'>, <class 'int'>])
      
    • count,儲存遇到的引數次數。
    • nrgs - 應該讀取的命令列引數個數,可以是具體的數字、*+?*表示0個或多個;+表示1個或多個;?時,若解析不到引數,則使用default值,對於可選引數,若只寫了引數名而後面沒有值,則使用const值。如
      >>> parser = argparse.ArgumentParser()
      >>> parser.add_argument('--foo', nargs='?', const='c', default='d')
      >>> parser.add_argument('bar', nargs='?', default='d')
      >>> parser.parse_args(['XX', '--foo', 'YY'])
      Namespace(bar='XX', foo='YY')
      >>> parser.parse_args(['XX', '--foo'])
      Namespace(bar='XX', foo='c')
      >>> parser.parse_args([])
      Namespace(bar='d', foo='d')
      
    注:nargs=1會將引數存放為list,不同於不設定;對引數加nargs='*'nargs='+'在一定程度可以代替action='append'
  • const - actionnargs所需要的常量值;
  • default - 不指定引數時的預設值;
  • type - 命令列引數應該被轉換成的型別;
  • choices - 引數可允許的值的一個容器。可以是listrange
  • required - 可選引數是否可以省略 (僅針對可選引數)。如果設定required='True',則可選引數解析不到時報錯;
  • metavar - 在 usage 說明中的引數名稱,對於位置引數預設就是引數名稱,對於可選引數預設是全大寫的引數名稱;
  • dest - 解析後的引數名稱,預設情況下,對於可選引數選取最長的名稱,中劃線轉換為下劃線。

參考