python - Python点击命令退出流程
问题描述
我有这个 python click CLI 设计(wificli.py
)。在命令执行结束时,它只打印相应的打印消息。
例如,当执行 command 时python3.7 wificli.py png
,它只打印png
,而当执行 command 时,python3.7 wificli.py terminal
它只打印terminal
。
正如我所展示的,我希望它也会打印End of start function
,End of the main function
但事实并非如此。这个想法是只在一个地方而不是在相应命令的每个退出点清理资源。
import click
@click.group()
@click.option('--ssid', help='WiFi network name.')
@click.option('--security', type=click.Choice(['WEP', 'WPA', '']))
@click.option('--password', help='WiFi password.')
@click.pass_context
def main(ctx, ssid: str, security: str = '', password: str = ''):
ctx.obj['ssid'] = ssid
ctx.obj['security'] = security
ctx.obj['password'] = password
@main.command()
@click.pass_context
def terminal(ctx):
print('terminal')
@main.command()
@click.option('--filename', help='full path to the png file')
@click.pass_context
def png(ctx, filename, scale: int = 10):
print('png')
def start():
main(obj={})
print('End of start function')
if __name__ == '__main__':
start()
print('End of main function')
执行时
解决方案
由于您没有提出具体问题,我只能发布对我有用的内容及其背后的原因,如果这不是您想要的,我提前道歉。
@main.resultcallback()
def process_result(result, **kwargs):
print('End of start function')
click.get_current_context().obj['callback']()
def start():
main(obj={'callback': lambda: print('End of main function')})
因此,这resultcallback
似乎是处理组终止和调用命令的建议方式。在我们的例子中,它会打印End of start function
,因为此时 start 函数已经执行完毕,所以我们在 terminating 之前结束main
。然后,它检索通过上下文传入的回调,并执行它。
我不确定这是否是惯用的做法,但它似乎具有预期的行为。
对于结果回调,这里回答了一个类似的问题
至于究竟是什么导致了这种行为,这只是基于在组或命令中放置 yield 的一些快速实验的猜测,我怀疑产生了某种线程/处理器来处理组及其命令的执行.
希望这可以帮助!
推荐阅读
- r - 如何使用ggplot2将两个或多个图组合在一个图中
- reactjs - 如何在呈现 dom 节点的 map 方法中进行 api 调用?
- python - 从 request.FILES.getlist() 将视频保存到文件系统
- python - TemplateDoesNotExist 异常
- java - 硒网格指定平台
- c# - 共同朋友类的 C# 解决方法
- git - 卡在 git commit 中
- macos - 使用调试符号在 MacOS 上构建 Qt 应用程序
- azure-devops - 在 Devops 中,您如何像在 MTM 中一样将测试计划套件置于 Alpha 顺序中?
- javascript - Vue 对象中的计算值函数被触发