argparse用于未知数量的参数和未知名称

2024-04-25 21:27:57 发布

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

我想获取传递给sys.argv的所有参数,其格式为
someprogram.py --someparameter 23 -p 42 -anotherparam somevalue。在

我要寻找的结果是一个包含所有变量的名称空间,已经解析过了。在

据我所知,argparse希望用户定义他期望的参数。在

有没有办法用argparse做到这一点? 谢谢!在


Tags: 用户py名称参数定义格式sysargparse
2条回答

使用Click我们可以构建这样一个命令:

import click

@click.command(help="Your description here")
@click.option(" someparameter", type=int, help="Description of someparameter")
@click.option(" p", type=int, help="Description of p")
@click.option(" anotherparam", type=str, help="Description of anotherparam")
def command(someparameter, p, anotherparam):
    pass


if __name__ == '__main__':
    command()

您将自动获得帮助选项:

^{pr2}$

如果需要获取所有未知参数,可以通过以下方式从上下文获取它们:

@click.command(context_settings=dict(
     ignore_unknown_options=True,
     allow_extra_args=True,
 ), add_help_option=False)
@click.pass_context
def command(ctx):
    click.echo(ctx.args)

如果您知道参数总是以 name value-name value的格式给出,那么您可以很容易地做到这一点

class ArgHolder(object):
    pass

name = None
for x in sys.argv[1:]:
    if name:
        setattr(ArgHolder, curname, x)
        name = None

    elif x.startswith('-'):
        name = x.lstrip('-')

现在您已经收集了类ArgHolder中的所有参数,该类是一个命名空间。您还可以在ArgHolder的实例中收集值

相关问题 更多 >

    热门问题