为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2023-07-27 16:12:48
我有以下代码:import argparseparser = 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 的一个选项?
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

执行此类操作的一种干净方法是子类化ArgumentParser并创建您自己的:


import argparse



class 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。


最后,您必须问自己,像这样的解决方案所提供的“便利”是否真的超过了编写它的工作量、额外代码的开销以及为未来您和其他贡献者提供的结果代码的缺乏清晰度。想知道额外的选项是从哪里来的。更不用说明确说明您正在设置哪些选项可能只是一件好事?


只是某件事可以做,并不意味着你应该这样做。


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信