假设我有一个使用argparse的python测试,有几个参数:
有时,我想更改默认的enabled_features,让我们说[A,B,C,D]:
在argparse类中有一个属性要知道:
opts = parser.parse_args()
...一个参数实际上是由用户指定的,即一个人使用了类似的东西:
$ python my_test.py --enabled_features A B C
而不是:
$ python my_test.py
谢谢!
答案 0 :(得分:3)
opts
包含argparse
可以为您提供的所有信息。因此,您必须测试某个默认值(最常见的是None
),或者缺少属性(如果default=argparse.SUPPRESS
)。
另一种方法是指定合理的default
,而不用担心用户是否在输入中指定了这些或其他值。更重要的是,用户是指定了值还是值本身?
答案 1 :(得分:0)
像...一样的东西。
myopts = vars(opts)
if opts['enabled_features'] is None:
#Set the default parameters as you please.
允许您查看是否在命令行中指定了opt(假设您已将参数添加到解析器中)。
答案 2 :(得分:0)
parser object itself保存了一些有用的信息,我们可以用这些信息检查添加参数时分配的默认值。
示例脚本parser_ex.py
:
import argparse
def specified_nondefault(opts, parser, arg):
"""
Checks whether an argument was specified to be something other than the
default value.
..Note: This doesn't actually check if the argument was specified, as it
can be 'tricked' by the user specifying the default value.
:param argparse.Namespace opts: Parsed arguments to check.
:param argparse.Parser parser: The parser they were parsed with.
:param str arg: The name of the argument in question.
:return bool: Whether the current argument value differs from the default.
"""
if getattr(opts, arg) == parser.get_default(arg):
return False
return True
parser = argparse.ArgumentParser()
parser.add_argument('enabled_features', nargs='*', default=['A', 'B', 'C', 'D'])
opts = parser.parse_args()
print specified_nondefault(opts, parser, 'enabled_features')
在哪种情况下:
>> parser_ex.py 'B'
True
因为我们做了一些非默认的事情。而
>> parser_ex.py 'A' 'B' 'C' 'D'
False
和
>> parser_ex.py
False
因为这只是默认输入。
请注意,因为我们正在检查整个列表,所以有些不合适的行为会导致重要事项和
>> parser_ex.py 'B' 'A' 'C'
True
IMO,这是将所有功能集中到一个参数中的问题,但如果你愿意,你当然可以以某种方式解决它。
然后,如果用户有/未指定非defualt enabled_features
,您可以根据需要更改IP
。