在 argparse 中自动添加更短的(posix)参数

我有以下代码:


import argparse

parser = argparse.ArgumentParser(description='Dedupe library.', allow_abbrev=True)

parser.add_argument( '-a', '--all', nargs='+', type=int, help='(Optional) Enter one or more IDs.')

-a是否可以在未指定时自动添加选项?例如,类似:


parser.add_argument('--all', nargs='+', type=int, help='(Optional) Enter one or more IDs.')

可以通过以下方式调用它:


$ parse.py -a 2

$ parse.py --all 2

或者这不是 argparse 的一个选项?


料青山看我应如是
浏览 83回答 1
1回答

三国纷争

执行此类操作的一种干净方法是子类化ArgumentParser并创建您自己的:import argparseclass MyArgumentParser(argparse.ArgumentParser):    def add_argument(self, *args, **kwargs):        # check if one was already passed, for backward compatibility        if not any(len(a) == 2 and a.startswith('-') for a in args):            for a in args:                if a.startswith('--'):                    # you could do something more fancy here, like calling an (optional) callback                    return super().add_argument(a[1:3], *args, **kwargs)        return super().add_argument(*args, **kwargs)parser = MyArgumentParser(description='Dedupe library.', allow_abbrev=True)parser.add_argument('--all', nargs='+', type=int, help='(Optional) Enter one or more IDs.', dest='all')请注意,这不一定是个好主意。您可能有冲突的选项(例如多个以相同字母开头的选项,因此您可能需要为此添加代码)。然后,您可能会偏好哪个选项采用哪个字母以及多个选项。ETC。最后,您必须问自己,像这样的解决方案所提供的“便利”是否真的超过了编写它的工作量、额外代码的开销以及为未来您和其他贡献者提供的结果代码的缺乏清晰度。想知道额外的选项是从哪里来的。更不用说明确说明您正在设置哪些选项可能只是一件好事?只是某件事可以做,并不意味着你应该这样做。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python