gpt4 book ai didi

python - 带有 python 单击库选项的可选 CLI 参数

转载 作者:行者123 更新时间:2023-12-03 23:48:46 26 4
gpt4 key购买 nike

我对 Python 有一个难题 Click解析某些 CLI 选项时的库。

我想要一个单独充当标志的选项,但可以选择接受字符串值。例如。:

  • $ myscript ⇒ 选项 = 假
  • $ myscript -o ⇒ 选项 = 真
  • $ myscript -o foobar ⇒ 选项 = Foobar

  • 此外,我希望该选项为“急切”(例如,在“单击”术语中,回调后中止执行)​​,但现在可以忽略此选项。

    当我这样定义我的论点时:
    @click.command()
    @click...
    @click.option("-o", "option", is_flag=True, default=False)
    def myscript(..., option):

    我实现了示例 1 和 2,但 3 自然是不可能的,因为该标志仅检测存在/不存在。

    当我这样定义我的论点时:
    @click.command()
    @click...
    @click.option("-o", "--option", default="") # Let's assume I will cast empty string to False
    def myscript(..., option):

    我实现了 1 和 3,但 2 将失败并显示 Error: -c option requires an argument .

    这似乎不像是一个超凡脱俗的场景,但我似乎无法实现这一目标或找到表现如此的示例。

    我如何定义 @click.option被解析为:
  • False未设置时
  • True设置但没有值时
  • str当设置为值
  • 最佳答案

    我设法实现这种行为的一种方法是实际使用如下参数。我会将此作为解决方法发布,同时我会尝试查看是否可以通过选项来完成,然后我会相应地更新我的帖子

    @click.command(context_settings={"ignore_unknown_options": True})
    @click.argument("options", nargs=-1)
    def myscript(options):
    option = False
    if options is ():
    option = False
    if '-o' in options or '--option' in options:
    option = True
    if len(options) > 1:
    option = options[1]
    print(option)

    稍后编辑
    使用一个选项,我设法通过向命令定义添加一个参数来实现这一点。

    @click.command()
    @click.option('-o', '--option', is_flag=True, default=False, is_eager=True)
    @click.argument('value', nargs=-1)
    def myscript(option, value):
    if option and value != ():
    option = value[0]
    print(option)

    nargs如果您只希望最多跟随一个参数,则可以将其删除,并且可以将其视为不需要。

    @click.command()
    @click.option('-o', '--option', is_flag=True, default=False, is_eager=True)
    @click.argument('value', required=False)
    def myscript(option, value=None):
    if option and value is not None:
    option = value
    print(option)

    也可以将上下文生成器放在一起并存储一些状态,但这似乎是最不理想的解决方案,因为您将依赖于存储状态的上下文。

    关于python - 带有 python 单击库选项的可选 CLI 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60741970/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com