【问题标题】:python click usage of standalone_modepython click 使用standalone_mode
【发布时间】:2015-12-15 10:03:26
【问题描述】:

这个问题是关于 Python Click 库的。

我想单击以收集我的命令行参数。收集后,我想重用这些值。我不想要任何疯狂的回调链接,只需使用返回值。默认情况下,单击禁用返回值并调用sys.exit()

我想知道如果我想使用装饰器样式,如何正确调用standalone_mode (http://click.pocoo.org/5/exceptions/#what-if-i-don-t-want-that)。上面链接的文档仅显示(手动)使用单击创建命令时的用法。 甚至可能吗?下面显示了一个最小的示例。说明点击从gatherarguments返回后直接调用sys.exit()

import click

@click.command()
@click.option('--name', help='Enter Name')
@click.pass_context
def gatherarguments(ctx, name):
    return ctx

def usectx(ctx):
    print("Name is %s" % ctx.params.name)

if __name__ == '__main__':
    ctx = gatherarguments()
    print(ctx) # is never called
    usectx(ctx) # is never called 

$ python test.py --name Your_Name

我希望它是无状态的,也就是说,没有任何 click.group 功能 - 我只想要结果,而不需要退出我的应用程序。

【问题讨论】:

    标签: python python-click


    【解决方案1】:

    仅发送standalone_mode 作为关键字参数对我有用:

    from __future__ import print_function
    import click
    
    @click.command()
    @click.option('--name', help='Enter Name')
    @click.pass_context
    def gatherarguments(ctx, name):
        return ctx
    
    def usectx(ctx):
        print("Name is %s" % ctx.params['name'])
    
    if __name__ == '__main__':
        ctx = gatherarguments(standalone_mode=False)
        print(ctx)
        usectx(ctx)
    

    输出:

    ./clickme.py --name something
    <click.core.Context object at 0x7fb671a51690>
    Name is something
    

    【讨论】:

    • 你在开玩笑吧,你只是尝试过这个还是有任何逻辑来找出答案?这是因为 kwarg 在创建时传递给click.Command 吗?不知何故,它被传递给click.Command.main(..)
    • 另外,如果有人执行./clickme.py asd 之类的操作,则此错误非常糟糕,因为您似乎从单击中松开了所有错误处理:(
    • 我查看了源代码,特别是 github.com/mitsuhiko/click/blob/master/click/core.py#L714,发现他们将 kwargs 传递给 main。关于错误处理,你会得到click.exceptions.UsageError: Got unexpected extra argument (asd)。所以我假设你可以抓住它并打印出更好的错误信息。但是,是的,你没有得到他们的错误处理。想知道你是否可以调用他们的错误处理程序......这将永远是一个黑客。
    • 没错,反正我会把你的答案标记为正确,因为它回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2023-03-26
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多