猿问

选择的选项激活正确的次级解析器

我必须以这种方式调用我的脚本。 script.py multiple --ways aa bb -as abab -bs bebe 在这种情况下-as abab,将--ways参数的参数改为“ aa”选项,-bs bebe将其改为“ bb”选项。


并且所有选择的选项都将影响将使用的“实现”方法。如果我们选择“ aa”和“ bb”,则应该只有选项“ -as”和“ -bs”,而不是“ -cs”。


import sys

from argparse import ArgumentParser


def fulfill_aa_parser(aa_parser):

    aa_parser.add_argument('--ass', '-as', type=str, required=True, choices=['abababa'])


def fulfill_bb_parser(aa_parser):

    aa_parser.add_argument('--bass', '-bs', type=str, required=True, choices=['bebebe'])


def fulfill_cc_parser(aa_parser):

    aa_parser.add_argument('--cass', '-cs', type=str, required=True, choices=['cycycyc'])


def fulfill_multiple_parser(multiple_parser):

    multiple_parser.add_argument('--ways', '-w', type=str, choices=['aa','bb', 'cc'], nargs='+', required=True)


def main(argv):

    parser = ArgumentParser(description='TEST CASE')

    subparsers = parser.add_subparsers(dest='type')


    multiple_parser = subparsers.add_parser(

        'multiple'

    )

    aabbparsers = multiple_parser.add_subparsers()

    aa_parser = aabbparsers.add_parser('aa')

    bb_parser = aabbparsers.add_parser('bb')

    cc_parser = aabbparsers.add_parser('cc')

    fulfill_multiple_parser(multiple_parser)

    fulfill_aa_parser(aa_parser)

    fulfill_bb_parser(bb_parser)

    fulfill_cc_parser(cc_parser)

    args = parser.parse_args(argv)

    if args.type is None:

        parser.print_help()

        return


if __name__ == '__main__':

    main(sys.argv[1:])

以这种方式解析:


    fulfill_aa_parser(multiple_parser)

    fulfill_bb_parser(multiple_parser)

    fulfill_cc_parser(multiple_parser)

会导致解析器始终要求'-as','-bs','-cs'和'--ways'中的选项不会对此产生影响


编辑:\这是当它有一些想法时看起来。只需将解析器传递给此函数


def fulfill_apple_argparser(parser):

    parser.add_argument("--apple_argument")


def fulfill_banana_argparser(parser):

    parser.add_argument("--banana_argument")


def fulfill_peach_argparser(parser):

    parser.add_argument("--peach_argument")


长风秋雁
浏览 142回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答