假设我有一个包含参数和选项的字符串列表,其中argparse
,我可以使用以下方法解析这个列表parse_args
将函数转化为对象,如下:
import argparse
extra_params = [‘—sum’, ‘7’, ‘-1’, ‘42’]
parser=argparse.ArgumentParser(description=“argparse docs example”)
parser.add_argument(‘integers’, metavar=‘N’, type=int, nargs=‘+’,
help=‘an integer for the accumulator’)
parser.add_argument(‘—sum’, dest=‘accumulate’, action=‘store_const’,
const=sum, default=max,
help=‘sum the integers (default: find the max)’)
parsed_object=parser.parse_args(extra_params)
Here, argparse
已解析提供的可迭代字符串。可以一个用吗click
还可以解析提供的字符串迭代吗?
我在 API 文档中搜索了click
似乎有一个parse_args
内的函数*Command
一组类,但在文档中没有看到有关如何执行此操作的任何内容。我尝试过实例化BaseCommand
也Command
但不知道如何获得parse_args
在没有正确上下文的情况下工作。
对于更广泛的背景,这个问题是由于构建了一个启动器应用程序而导致的,最终用户将其用作启动自己的应用程序的脚手架。在这里,启动器使用了许多参数,点击装饰器可以完美地工作。可以按照文档中所示处理未知参数here https://click.palletsprojects.com/en/7.x/advanced/#forwarding-unknown-options。然后,该启动器使用这些未解析的参数调用最终用户提供的可调用函数。单击将未解析的参数保留为字符串元组。在这种情况下,最终用户如何能够使用 Click 来解析他们感兴趣的参数?这是一个说明问题的片段:
import click
from typing import Tuple
@click.command(name="TestLauncher", context_settings={
"ignore_unknown_options": True
})
@click.option('--uri', '-u',
help="URI for the server")
@click.argument('unprocessed_args', nargs=-1,
type=click.UNPROCESSED)
def main(uri: str, unprocessed_args: Tuple[str, ...]) -> None:
print(f"Was passed a URI of {uri}")
print(f"Additional args are {unprocessed_args}")
child_function(unprocessed_args)
def child_function(unprocessed_args: Tuple[str, ...]) -> None:
# How do I get Click to parse the provided args for me?
pass
if __name__ == "__main__":
# pylint: disable=no-value-for-parameter, unexpected-keyword-arg
main()
从命令行运行:
python3 so_test.py --uri test.com --prog-arg 10
Was passed a URI of test.com
Additional args are ('--prog-arg', '10')