如果您想允许--feature
并且--no-feature
同时(最后一个获胜)
这允许用户使用 来创建 shell 别名--feature
,并使用 覆盖它--no-feature
。
Python 3.9 及更高版本
parser.add_argument('--feature', default=True, action=argparse.BooleanOptionalAction)
Python 3.8 及以下
我推荐mgilson的回答:
parser.add_argument('--feature', dest='feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)
如果您不想--feature
同时--no-feature
允许
您可以使用互斥组:
feature_parser = parser.add_mutually_exclusive_group(required=False)
feature_parser.add_argument('--feature', dest='feature', action='store_true')
feature_parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)
如果您要设置其中的许多,您可以使用这个助手:
def add_bool_arg(parser, name, default=False):
group = parser.add_mutually_exclusive_group(required=False)
group.add_argument('--' + name, dest=name, action='store_true')
group.add_argument('--no-' + name, dest=name, action='store_false')
parser.set_defaults(**{name:default})
add_bool_arg(parser, 'useful-feature')
add_bool_arg(parser, 'even-more-useful-feature')