argparse模塊見解(一)
阿新 • • 發佈:2019-01-03
this 屬於 .text ace types 表示 info 針對 object
看了官方文檔,開篇一個例子,看得我很懵逼,如下
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))
所以這裏從add_argument方法入手,結合官方文檔,寫一下自己的理解
參數
ArgumentParser.add_argument(name or flags...[,action][,nargs][,const][,default][,type][,choices][,requried][,help][,metavar][,dest])
###name or flags
add_argument()方法必須的參數,且位於第一個位置,判斷參數是可變參數,還是位置參數,格式要求:
>>>parser.add_argument(‘--foo‘,‘-f‘) #這種形式表示可變參數,前綴可根據parse.ArgumentParser()裏面的prefix_char參數來定義 >>>parser.add_argument(‘foo‘) #這種形式表示位置參數
help
自定義add_argument()中參數的幫助信息
wuxiangyu:test_all dor-pc$ cat help_argument.py #!/usr/bin/env python #coding=utf-8 import argparse parser = argparse.ArgumentParser() parser.add_argument(‘--foo‘,help="this is mystyle help") parser.parse_args() dor:test_all wuxiangyu-pc$ ./help_argument.py -h usage: help_argument.py [-h] [--foo FOO] optional arguments: -h, --help show this help message and exit --foo FOO this is mystyle help
type
默認情況下對於命令行參數是直接解析成字符串類型,type可以指定參數類型為其它
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument(‘foo‘, type=int) #指定參數類型為整型
>>> parser.add_argument(‘bar‘, type=open) #指定對於參數進行open操作
>>> parser.parse_args(‘2 temp.txt‘.split())
Namespace(bar=<_io.TextIOWrapper name=‘temp.txt‘ encoding=‘UTF-8‘>, foo=2)
還提供了工廠函數類型,也可以指定為自定義的函數類型
>>>parser = argparse.ArgumentParser()
>>>parser.add_argument(‘bar‘,type=argparse.FileType(‘w‘))
>>>parser.parse_args([‘out.txt‘])
Namespace(bar=<_io.TextIOWrapper name=‘out.txt‘ mode=‘w‘ encoding=‘UTF-8‘>) #以‘w‘方式打開了一個名為‘out.txt‘的文檔
>>> def perfect_square(string):
... value = int(string)
... sqrt = math.sqrt(value)
... if sqrt != int(sqrt):
... msg = "%r is not a perfect square" % string
... raise argparse.ArgumentTypeError(msg)
... return value
...
>>> parser = argparse.ArgumentParser(prog=‘PROG‘)
>>> parser.add_argument(‘foo‘, type=perfect_square)
>>> parser.parse_args([‘9‘])
Namespace(foo=9)
>>> parser.parse_args([‘7‘])
usage: PROG [-h] foo
PROG: error: argument foo: ‘7‘ is not a perfect square
choices
用於界定參數的取值範圍
>>> parser = argparse.ArgumentParser(prog=‘doors.py‘)
>>> parser.add_argument(‘door‘, type=int, choices=range(1, 4))
>>> print(parser.parse_args([‘3‘]))
Namespace(door=3)
>>> parser.parse_args([‘4‘])
usage: doors.py [-h] {1,2,3}
doors.py: error: argument door: invalid choice: 4 (choose from 1, 2, 3)
dest
使用parse_args()對參數進行解析後,一個屬性對應一個參數的值,而該屬性值正是dest的值,默認情況下,對於位置參數,就是位置參數的值,對於可選參數,則是去掉前綴後的值
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument(‘bar‘)
_StoreAction(option_strings=[], dest=‘bar‘, nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument(‘--version‘)
_StoreAction(option_strings=[‘--version‘], dest=‘version‘, nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
nargs
一般情況下,一個參數與一個操作參數(如:--version)關聯,但nargs可以將多個參數與一個操作參數關聯
- N - 一個正整數,
>>> parser = argparse.ArgumentParser() >>> parser.add_argument(‘--foo‘, nargs=2) >>> parser.add_argument(‘bar‘, nargs=1) >>> parser.parse_args(‘c --foo a b‘.split()) Namespace(bar=[‘c‘], foo=[‘a‘, ‘b‘])
- ‘?‘ - 一個或多個參數
>>> 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‘)
required
用來設置必選參數,設定後在命令行不使用會報錯
>>> parser.add_argument(‘--foo‘,required=True) >>> parser.add_argument(‘--version 21‘.split) >>> parser.parse_args(‘--version 21‘.split()) usage: [-h] --foo FOO [--version VERSION] : error: the following arguments are required: --foo
default
設置參數的默認值,命令行有則覆蓋默認值,沒有則使用默認值
const
官網給出的解釋是:
The const argument of add_argument() is used to hold constant values that are not read from the command line but are required for the various ArgumentParser actions. The two most common uses of it are:
When add_argument() is called with action=‘store_const‘ or action=‘append_const‘. These actions add the const value to one of the attributes of the object returned by parse_args(). See the action description for examples.
When add_argument() is called with option strings (like -f or --foo) and nargs=‘?‘. This creates an optional argument that can be followed by zero or one command-line arguments. When parsing the command line, if the option string is encountered with no command-line argument following it, the value of const will be assumed instead. See the nargs description for examples.
With the ‘store_const‘ and ‘append_const‘ actions, the const keyword argument must be given. For other actions, it defaults to None.
是針對於action中的‘store_const‘與‘append_const‘而出現。其實對於那些需要接值的參數,預先存儲一個值,如果沒有則取用這個值,比如
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument(‘--foo‘,action=‘store_const‘,const=42)
>>> parser.add_argument(‘--bar‘,action=‘append_const‘,const=‘hello‘)
>>> parser.parse_args(‘--foo --bar‘.split())
Namespace(bar=[‘hello‘], foo=42)
action
用來給ArgumenParser對象判斷如何處理命令行參數支持的操作如下:
- ‘store‘ - 默認的操作,用來存儲參數的值
>>>parser = argparse.ArgumentParser() >>>parser.add_argument(‘--foo‘) >>>parser.parse_args(‘--foo 1‘.split) Namespace(foo=‘1‘)
- ‘store_const‘ - 適用於可選參數optional arguments,用來存儲const關鍵字指定的值
>>>parser = argparse.ArgumentParser() >>>parser.add_argument(‘--foo‘,action=‘store_const‘,const=42) >>>parser.parse_args([‘--foo‘]) Namespace(foo=42)
- ‘store_true和‘store_false‘‘ - 屬於‘store_const‘的特殊用法,設定const的默認值為True或False並分別進行存儲
>>> parser = argparse.ArgumentParser() >>> parser.add_argument(‘--foo‘, action=‘store_true‘) >>> parser.add_argument(‘--bar‘, action=‘store_false‘) >>> parser.add_argument(‘--baz‘, action=‘store_false‘) >>> parser.parse_args(‘--foo --bar‘.split()) Namespace(foo=True, bar=False, baz=True)
- ‘append‘ - 將每個參數的值追加到一個列表裏面
>>>parser = argparse.ArgumentParser() >>>parser.add_argument(‘--foo‘,action=‘append‘) >>>parser.parse_args(‘--foo a --foo b --foo c‘.split()) Namespace(foo=[‘a‘, ‘b‘, ‘c‘])
- ‘append_const‘ - 當多個參數需要將常量存儲到一個列表時設置
>>> 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) >>> parser.parse_args(‘--str --int‘.split()) Namespace(types=[<class ‘str‘>, <class ‘int‘>])
‘count‘ - 對參數出現的次數進行計數
>>> parser.add_argument(‘-v‘,action=‘count‘) _CountAction(option_strings=[‘-v‘], dest=‘v‘, nargs=0, const=None, default=None, type=None, choices=None, help=None, metavar=None) >>> parser.parse_args([‘-vvv‘]) Namespace(v=3)
‘version‘ - 定義版本信息
>>> import argparse >>> parser = argparse.ArgumentParser(prog=‘PROG‘) >>> parser.add_argument(‘--version‘, action=‘version‘, version=‘%(prog)s 2.0‘) >>> parser.parse_args([‘--version‘]) PROG 2.0
metavar
我理解為是對在命令行所接參數的樣式的示例,比如--version後面應接3位大寫字母(比如YYY),則可以設定metavar=‘YYY‘,意思為此處應接三位大寫字母
>>> parser.add_argument(‘--version‘,metavar=‘YYY‘)
_StoreAction(option_strings=[‘--version‘], dest=‘version‘, nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=‘YYY‘)
>>> parser.add_argument(‘--info‘,metavar=‘XX‘)
_StoreAction(option_strings=[‘--info‘], dest=‘info‘, nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=‘XX‘)
>>> parser.parse_args(‘--version HTB --info HK‘.split())
Namespace(info=‘HK‘, version=‘HTB‘)
>>> parser.print_help()
usage: [-h] [--version YYY] [--info XX]
optional arguments:
-h, --help show this help message and exit
--version YYY
--info XX
argparse模塊見解(一)