如何使用Click来分析字符串中的参数? [英] How can I use click to parse a string for arguments?

查看:0
本文介绍了如何使用Click来分析字符串中的参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个包含参数和选项的字符串列表,使用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)

这里,argparse已经解析了提供的可迭代字符串。是否也可以使用click来分析提供的可迭代字符串?

我已经搜索了click的API文档,似乎在*Command类集中有一个parse_args函数,但在文档中没有看到任何关于如何做到这一点的内容。我已尝试实例化BaseCommandCommand,但不确定如何在没有正确上下文的情况下使parse_args工作。

从更广泛的背景来看,这个问题是因为构建了一个启动器应用程序,最终用户将其用作启动自己的应用程序的支架。在这里,Launcher使用了许多参数,而Click修饰符对这些参数非常有效。未知参数可以按照文档here中所示进行处理。然后,该启动器调用使用这些未解析的参数提供的Callable终端用户。单击将未分析的参数保留为字符串元组。在这种情况下,终端用户如何能够使用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')

推荐答案

查看注释和随后的编辑,使我认为只需对子函数应用单击修饰符可能会奏效。的确,看起来是这样,但我不完全知道为什么。

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)

@click.command()
@click.option('--prog-arg')
def child_function(prog_arg: str) -> None:
    # How do I get Click to parse the provided args for me?
    print(f"Child function passed: {prog_arg}")

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')
Child function passed: 10

这篇关于如何使用Click来分析字符串中的参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆