我想获取传递给sys.argv
且格式为
的所有参数
someprogram.py --someparameter 23 -p 42 -anotherparam somevalue
。
我正在寻找的结果是一个包含所有已解析变量的命名空间。
据我所知,argparse期望用户定义他期望的参数。
用argparse做到这一点的任何方法吗? 谢谢 !
答案 0 :(得分:2)
如果您知道参数将始终以--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
答案 1 :(得分:0)
使用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)