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('-')
现在您已经收集了 class 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)
我想获取所有传递给 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('-')
现在您已经收集了 class 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)