我的CLI应用程序通常有子命令。我希望在我的CLI应用程序的根处有--version标志,但是在Typer中,我只看到了将它放到命令中的方法。我想将它添加到typer.Typer对象(根)本身。我怎么能这么做?
我试过的
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()这给了我们
$ 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.我想要的:
$ python cli.py --help
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
Options:
--version
--help Show this message and exit.
Commands:
foo发布于 2022-02-06 14:24:08
这是针对在文件中的
但是,由于这些CLI参数是由每个命令处理的,因此它们不允许我们为主CLI应用程序本身创建CLI参数。 但是我们可以使用@app.callback()。 它非常类似于@app.command(),但它声明了主CLI应用程序的CLI参数(在命令之前):
为了做你想做的事,你可以写这样的东西:
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()这给了我们:
$ python typertest.py --help
Usage: typertest.py [OPTIONS] COMMAND [ARGS]...
Options:
--version
--help Show this message and exit.
Commands:
foo
mainhttps://stackoverflow.com/questions/71007924
复制相似问题