从Python代码内部启动Click CLI应用程序

tcomlyy6  于 2023-04-28  发布在  Python
关注(0)|答案(1)|浏览(128)

bounty已结束。回答此问题可获得+100声望奖励。赏金宽限期15小时后结束。alfalfasprout正在寻找典型答案

我想将使用click编写的python CLI集成到使用另一个框架构建的python CLI应用程序中。重写调用应用程序不是一个选项。
作为集成的一部分,我需要从代码中调用clickCLI,传递它应该直接使用的参数。我该怎么做?
举一个具体的例子,假设我将它作为foobar theclickcli <args>调用,其中foobar是未在click中编写的CLI,theclickcli是一个子命令,它应该调用我的click CLI及其参数(<args>)。
我看到click提供了click.testing.CLIRunner类,允许调用组或命令。然而,文件指出:
“...[this]应该只用于测试,因为它们为了简单而改变了整个解释器状态,并且无论如何都不是线程安全的。
有没有一种“惯用”的方式来调用clickCLI(而不仅仅是一个子命令),给定一个argv参数列表(如argparse中)?

flvlnr44

flvlnr441#

您可以手动创建新的Context对象,并使用Context调用命令。invoke()方法。例如:

import click

@click.command()
@click.option('--name', default='World', help='Who to greet')
def hello(name):
    click.echo(f'Hello, {name}!')

def invoke_click_command(args):
    ctx = click.Context(hello)
    ctx.invoke(hello, args=args)

相关问题