繁体   English   中英

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

[英]argparse for unknown number of arguments and unknown names

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

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

据我了解,argparse期望用户定义他期望的参数。

用argparse可以做到吗? 谢谢 !

如果您知道参数将始终以--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实例中收集值

使用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()

您将自动获得一个帮助选项:

$ python command.py --help
Usage: command.py [OPTIONS]

  Your description here.

Options:
  --someparameter INTEGER  Description of someparameter.
  ...
  --help           Show this message and exit.

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

@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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM