overview
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
定义单个的命令行参数应当如何解析。每个形参都在下面有它自己更多的描述,长话短说有:
name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
action - 当参数在命令行中出现时使用的动作基本类型。
nargs - 命令行参数应当消耗的数目。
const - 被一些 action 和 nargs 选择所需求的常数。
default - 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。
type - 命令行参数应当被转换成的类型。
choices - 可用的参数的容器。
required - 此命令行选项是否可省略 (仅选项可用)。
help - 一个此选项作用的简单描述。
metavar - 在使用方法消息中使用的参数值示例。
dest - 被添加到 parse_args() 所返回对象上的属性名。
name or flags:add_argument() 方法必须知道它是否是一个选项,例如 -f 或 --foo,或是一个位置参数,例如一组文件名。第一个传递给 add_argument() 的参数必须是一系列 flags 或者是一个简单的参数名。
parser.add_argument('-f','--foo')
位置参数创建:
parser.add_argument('bar')
当 parse_args() 被调用,选项会以 - 前缀识别,剩下的参数则会被假定为位置参数。
action:action 命名参数指定了这个命令行参数应当如何处理。供应的动作有:
'store' - 存储参数的值。这是默认的动作
'store_const' - 存储被 const 命名参数指定的值。 'store_const' 动作通常用在选项中来指定一些标志。
'store_true' and 'store_false' - 这些是 'store_const' 分别用作存储 True 和 False 值的特殊用例。另外,它们的默认值分别为 False 和 True。(存储true和false有什么用呢?)
'append' - 存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用。
parser.parse_args('--foo 1 --foo 2'.split()) #使用同一个参数多次
'append_const' - 这存储一个列表,并将 const 命名参数指定的值追加到列表中。 'append_const' 动作一般在多个参数需要在同一列表中存储常数时会有用。
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()) #一次使用不同的参数,并且需要合并const,那怎么才能取到这个列表??
'count' - 计算一个关键字参数出现的数目或次数。例如,对于一个增长的详情等级来说有用。注意:default 将为 None,除非显式地设为 0。
parser=argparse.ArgumentParser()
parser.add_argument('--verbose','-v',action='count',default=0)
parser.parse_args(['-vvv'])
Namespace(verbose=3)
'help' - 打印所有当前解析器中的选项和参数的完整帮助信息,然后退出。默认情况下,一个 help 动作会被自动加入解析器。关于输出是如何创建的,参与 ArgumentParser。
'version' - 期望有一个 version= 命名参数在 add_argument() 调用中,并打印版本信息并在调用后退出。
'extend' - 这会存储一个列表,并将每个参数值加入到列表中。 示例用法:
parser=argparse.ArgumentParser()
parser.add_argument("--foo",action="extend",nargs="+",type=str)
parser.parse_args(["--foo","f1","--foo","f2","f3","f4"])
Namespace(foo=['f1', 'f2', 'f3', 'f4'])
你还可以通过传递一个 Action 子类或实现相同接口的其他对象来指定任意操作。 BooleanOptionalAction 在 argparse 中可用并会添加对布尔型操作例如 --foo 和 --no-foo 的支持:
import argparse
parser=argparse.ArgumentParser()
parser.add_argument('--foo',action=argparse.BooleanOptionalAction)
parser.parse_args(['--no-foo'])
Namespace(foo=False)
创建自定义动作的推荐方式是扩展 Action,重载 __call__ 方法以及可选的 __init__ 和 format_usage 方法。
一个自定义动作的例子: #这个应该是我需要的功能了!!把action学完写一个例子看看!
classFooAction(argparse.Action):
... def__init__(self,option_strings,dest,nargs=None,**kwargs):... ifnargsisnotNone:... raiseValueError("nargs not allowed")
... super(FooAction,self).__init__(option_strings,dest,**kwargs)
... def__call__(self,parser,namespace,values,option_string=None):
... print('%r %r %r'%(namespace,values,option_string))
... setattr(namespace,self.dest,values)
...parser=argparse.ArgumentParser()
parser.add_argument('--foo',action=FooAction)
parser.add_argument('bar',action=FooAction)
args=parser.parse_args('1 --foo 2'.split())
Namespace(bar=None, foo=None) '1' None
Namespace(bar='1', foo=None) '2' '--foo'
args
Namespace(bar='1', foo='2')
更多描述,见 Action。