python - 我可以检查一个子命令可以在 Python 中运行吗 在检查选项之前单击
问题描述
我使用 python click 为我的应用程序创建一个带有子命令的 CLI。我有这样的代码:
@click.group()
def cli():
pass
@cli.command(debug)
@@click.option('--debug/--no-debug', default=False)
def sub1():
# code doing stuff on a git repo
@cli.command()
@click.option('--yes', type=bool, default=False)
def sub2(yes):
# code doing other stuff on the git repo
@cli.command()
@click.option('--yes', type=bool, default=False)
def sub3(yes):
# code doing last stuff on git repo
我的问题是,按照上面的代码,命令的唯一允许顺序是cli sub1 -> cli sub2 -> cli sub3
. 这与它在后台运行的 git 代码有关(例如,提交之前需要创建一个分支)。
我想做的是定义一个命令,例如
def check_2():
# checking cli sub1 was run.
并在开始时运行它cli sub2
以检查cli sub1
之前运行的情况(此函数cli sub1
通过查看 git repo 状态来确定状态“之前运行”)。
我的问题是我想在解析选项之前运行它(我定义了自己的回调来提示输入,如果丢失)。我不希望用户输入其选项并在之后得到错误。
一个主意?
解决方案
我终于在点击文档中找到了我需要的东西。
这是我的调试处理解决方案。
@click.group()
@click.option("--debug/--no-debug", default=False, envvar="GIPP_DEBUG")
@click.pass_context
def cli(ctx, debug):
try:
subcommand = ctx.invoked_subcommand
validate_subcommand(subcommand)
except Exception as e:
if debug:
raise
else:
sys.exit(f"Error: {e}")
@cli.command()
def sub1():
# code doing stuff on a git repo
...
推荐阅读
- c# - 使用 protobuf 流式传输压缩的 IDataReader
- python - 在哪里可以使用安装在 python 虚拟环境中的包?
- batch-file - 在文本文件中的每一行的最后一个分隔符之后提取字符串
- python - 即使在将 Black 配置为格式化程序后,获取“扩展 'Python Language Basics' 无法格式化 ~'/'”
- vue.js - 如何将 ASP Core Web API VueJS 站点部署到 IIS
- groovy - 利用流出外部进程的返回值的问题
- java - 使用 java 来操作 minecraft 服务器输入/输出
- rust - 如果在 Rust book 20.3 中将发送 Terminate 消息和 thread.join() 放在一个循环中,为什么会出现死锁?
- python - Selenium python获取网站中资源(图像,脚本,css)的4xx和5xx列表
- c# - 打印item中item的索引