首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得typer.Typer应用程序的根目录--版本?

如何获得typer.Typer应用程序的根目录--版本?
EN

Stack Overflow用户
提问于 2022-02-06 14:01:06
回答 1查看 512关注 0票数 0

我的CLI应用程序通常有子命令。我希望在我的CLI应用程序的根处有--version标志,但是在Typer中,我只看到了将它放到命令中的方法。我想将它添加到typer.Typer对象(根)本身。我怎么能这么做?

我试过的

代码语言:javascript
复制
import typer
from typing import Optional

__version__ = "0.1.0"


def version_callback(value: bool):
    if value:
        typer.echo(f"Awesome CLI Version: {__version__}")
        raise typer.Exit()


app = typer.Typer(
    add_completion=False,
)


@app.command()
def main(
    version: Optional[bool] = typer.Option(
        None, "--version", callback=version_callback
    ),
) -> None:
    pass


@app.command()
def foo() -> None:
    pass


if __name__ == "__main__":
    app()

这给了我们

代码语言:javascript
复制
$ python cli.py --help   
Usage: cli.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  foo
  main

$ python cli.py main --help
Usage: cli.py main [OPTIONS]

Options:
  --version
  --help     Show this message and exit.

我想要的:

代码语言:javascript
复制
$ python cli.py --help   
Usage: cli.py [OPTIONS] COMMAND [ARGS]...

Options:
  --version
  --help  Show this message and exit.

Commands:
  foo
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-06 14:24:08

这是针对在文件中

但是,由于这些CLI参数是由每个命令处理的,因此它们不允许我们为主CLI应用程序本身创建CLI参数。 但是我们可以使用@app.callback()。 它非常类似于@app.command(),但它声明了主CLI应用程序的CLI参数(在命令之前):

为了做你想做的事,你可以写这样的东西:

代码语言:javascript
复制
import typer
from typing import Optional

__version__ = "0.1.0"


def version_callback(value: bool):
    if value:
        typer.echo(f"Awesome CLI Version: {__version__}")
        raise typer.Exit()


app = typer.Typer(
    add_completion=False,
)


@app.callback()
def common(
    ctx: typer.Context,
    version: bool = typer.Option(None, "--version", callback=version_callback),
):
    pass


@app.command()
def main() -> None:
    pass


@app.command()
def foo() -> None:
    pass


if __name__ == "__main__":
    app()

这给了我们:

代码语言:javascript
复制
$ python typertest.py --help
Usage: typertest.py [OPTIONS] COMMAND [ARGS]...

Options:
  --version
  --help     Show this message and exit.

Commands:
  foo
  main
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71007924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档