确定使用了什么样的辅助炮弹

2024-10-02 08:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个有几个子parser的软件,我希望那些子parser具有不同的convert_arg_line_to_args定义,所以我所做的是替换解析器的功能,考虑到所选的子parser:

parser = ArgumentParser(fromfile_prefix_chars='@')
subparsers = parser.add_subparsers(title='Available sub commands')

sub_parser = subparsers.add_parser("sub1", help="sub1")
sub_parser.add_argument("--paramsub1", required=True, dest="paramsub1")
sub_parser.set_defaults(cmd_object="sub1")

sub_parser = subparsers.add_parser("sub2", help="sub2")
sub_parser.add_argument("--paramsub2", required=True, dest="paramsub2")
sub_parser.set_defaults(cmd_object="sub2")

我希望argparse不要检查参数,但请告诉我选择了哪个子parser:

^{pr2}$

有什么想法吗?


Tags: cmdaddtrueparserobjectrequiredhelpargument
1条回答
网友
1楼 · 发布于 2024-10-02 08:30:23

是否要检查子parser名称以便设置convert_arg_line_to_args函数?相反,您可以在安装过程中更改该功能。在

这个装置怎么样?在

def function1(arg_line):
    print('function1: %r'%arg_line)
    return [arg_line]

def function2(arg_line):
    print('function2: %r'%arg_line)
    return arg_line.split()

parser = ArgumentParser()
subparsers = parser.add_subparsers(title='Available sub commands', dest='cmd_object')

sub_parser1 = subparsers.add_parser("sub1", help="sub1",fromfile_prefix_chars='@')
sub_parser1.convert_arg_line_to_args = function1
sub_parser1.add_argument(" paramsub1")

sub_parser2 = subparsers.add_parser("sub2", help="sub2",fromfile_prefix_chars='@')
sub_parser2.convert_arg_line_to_args = function2
sub_parser2.add_argument(" paramsub2")

{从解析器移到子pars}。这样解析器就不会试图读取参数文件。在

通常需要的参数被定义为positional(不带)。在

使用dest='cmd_object'将子parser名称放入命名空间中。sest_defaults也可以工作,但当您想将该值设置为函数(或其他非字符串)时,它更有用。在

相关问题 更多 >

    热门问题