我有一个情况,当我需要添加到我的命令参数时,没有像这样的值:
# command -v or
# command -vv or
# command -vvv
我需要验证“-v”是否在 1 到 3 之间。 如果没有出现错误消息。
这是我添加的参数之一,它是可选的。
在添加参数期间,我找不到任何解决方案(例如 store_count 或其他操作)来执行此操作,例如:
parser.add_argument('-v', '--verbosity', action=<any action>, default=0, required=False)
我尝试创建自定义操作,例如:
import argparse
parser = argparse.ArgumentParser()
class CustomAction(argparse.Action):
def __init__(self,
option_strings,
dest,
default=None,
required=False,
help=None):
super(CustomAction, self).__init__(
option_strings=option_strings,
dest=dest,
nargs=0,
default=default,
required=required,
help=help)
def __call__(self, parser, namespace, values, option_string=None):
count = getattr(namespace, self.dest, None)
if count is None:
count = 0
setattr(namespace, self.dest, count + 1)
parser.add_argument('-v', '--verbosity', action=CustomAction, default=0, required=False)
args = parser.parse_args()
尝试在
"-v"
函数中设置验证,如果 __call__
介于 1 和 3 之间,但变量 values
始终为空列表。
变量
values
计数正确,但在退出 __call__
功能后设置。
我可以在 parser.add_argument() 之外执行此操作,但我想让它更漂亮并避免混乱的代码。
你知道我怎样才能实现这个目标吗?
也许你可以阅读这个文档。
这是最简单的方法
python code.py -v [num]
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbosity', dest='verbosity', default=0, required=False, type=int, choices=[1,2,3])
args = parser.parse_args()
v = args.verbosity
import argparse
parser = argparse.ArgumentParser()
levels = 3
for i in range(1, levels+1):
parser.add_argument(f'-{"v"*i}', dest=f'v'*i, , default=False, required=False, action='store_true')
args = parser.parse_args()
v = 0
for (k, i) in args._get_kwargs():
if k.replace('v', '') != '':
pass
if i == True:
if v == 0:
v = len(k)
else:
raise ValueError('Only one of them')