- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想创建具有以下签名的参数解析器:
./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/
我试图有两个选项供用户选择.. parser = argparse.ArgumentParser(description='This is a test script...') parser.add_
我想创建具有以下签名的参数解析器: ./myapp [-a [-b BVAL] | -c] 换句话说,用户可以提供参数-b BVAL 只有在他提供参数-a 的情况下。 创建互斥组 -a 和 -c 很容
argumentparser 可以接受文件类型参数并直接打开文件,例如: parser.add_argument('infile', nargs='?', type=argparse.FileType
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
找不到任何现有的方法,所以我想知道是否有 hack? 最佳答案 有一个黑客;您可以使用未记录的属性 parser._actions 列出所有已注册的操作: >>> import argparse >>
有没有办法为 np.array 而不是列表添加参数到 ArgumentParser ?我知道我可以做这样的事情 import argparse parser = argparse.ArgumentPa
我正在尝试添加开关 -c 并指定配置文件。我现在使用 config.dat 让它工作,但是当我使用 -c 并指定一个新的 .dat 时,它使用默认的 config.dat.... 知道我哪里出错了吗?
我认为下面的代码是正确的。它试图使命令行中的“checkRoot”选项成为可能。但即使是最简单的代码也行不通,用 'ArgumentParser' object has no attribute 'p
我正在尝试做一件非常简单的事情 - 只有两个选项:-p 和 -c,它们互斥并且可能有也可能没有 argument,使用可选参数执行 th...is 或不使用参数执行 th...at。这是我得到的: d
我想给切片字符串作为参数,见下文 import argparse def _parse_slice(s): a = [int(e) if e.strip() else None for e i
问题:从现有 argparse.ArgumentParser 对象访问可能参数的预期/官方方式是什么? 示例:让我们假设以下上下文: import argparse parser = argparse
我正在对 ArgumentParser 进行子类化,以便我可以干掉我在包中的多个命令中的通用代码。但是,我遇到了一些我无法解释的奇怪行为。 查看我的程序的这个非常简化的版本,并注意末尾带有注释的两行:
我想翻译如下内容: test.py --group 1 --opt1 foo1 --opt2 bar1 \ --group 2 --opt1 foo2 \ --grou
我正在开发自动化测试框架(使用 pytest)来测试应用程序的多种风格。测试框架应该能够解析通用(所有风格)命令行参数和特定于风格的参数。代码如下所示: 父级.py: import argparse
我想手动处理 parse_args() 在参数值未知时抛出错误的情况。例如:如果我有以下名为 script.py 的 python 文件: argp = argparse.ArgumentParser
conflict_handler(action, confl_optionals) File "/usr/local/lib/python3.6/argparse.py", line 1510,
我正在使用 argparse接受命令行输入并生成帮助文本。我想使用 ArgumentDefaultsHelpFormatter 作为 formatter_class,但是这会阻止我也使用 RawDes
我将如何在 choices 中包含正则表达式? Python 的 ArgumentParser.add_argument() 方法的 kwarg? 例如,假设我想创建自己的自定义挂载程序: # fil
我的脚本包含一长串可选参数,最近我在其中添加了通过文件传递参数的选项。其代码如下:我首先添加 from_file 参数,然后添加 parse_known_args。除了 -h 标志之外,一切正常。调用
例如: import argparse parser = arparse.ArgumentParser() # parser.add_argument(...) ... args = parser.p
我是一名优秀的程序员,十分优秀!