gpt4 book ai didi

Python ArgumentParser 嵌套参数

转载 作者:太空狗 更新时间:2023-10-30 01:49:11 24 4
gpt4 key购买 nike

我想创建具有以下签名的参数解析器:

./myapp [-a [-b BVAL] | -c]

换句话说,用户可以提供参数-b BVAL 只有在他提供参数-a 的情况下。

创建互斥组 -a-c 很容易,但我不知道如何创建关系 allow -b only如果 -a 提供了

最佳答案

您可以继承自 ArgumentParser 以添加一些自定义功能。在这里我提出了一个异常(exception),但你可以修改它来实现你想要的任何东西。只需更改 on_dependency_error() 方法以满足您的需要。

from argparse import ArgumentParser

class FancyParser(ArgumentParser):
# {'b': 'a'} Where b depends on a
dependencies = {}

def on_dependency_error(self, arg, depends_on):
raise FancyParser.DependencyError(
'Argument %s depends on %s' % (arg, depends_on))

def add_argument(self, *args, **kwargs):
depends_on = kwargs.get('depends_on')
if depends_on:
self.dependencies[kwargs.get('dest') or args[0]] = depends_on
del kwargs['depends_on']
return super(FancyParser, self).add_argument(*args, **kwargs)

def parse_args(self, *args, **kwargs):
args = super(FancyParser, self).parse_args(*args, **kwargs)
for arg, depends_on in self.dependencies.iteritems():
if getattr(args, arg) and not getattr(args, depends_on):
self.on_dependency_error(arg, depends_on)
return args

class DependencyError(Exception):
def __init__(self, *args, **kwargs):
return super(FancyParser.DependencyError,
self).__init__(*args, **kwargs)

然后你可以像这样使用它 -

args = ['-a', '-b', 'BVAL', '-c']
parser = FancyParser()
parser.add_argument('-a', dest='a', action='store_true')
parser.add_argument('-b', dest='b', depends_on='a')
parser.add_argument('-c', dest='c', action='store_true')
try:
parser.parse_args(args)
except FancyParser.DependencyError as e:
# Whatever here...
pass

关于Python ArgumentParser 嵌套参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com