使用@click.command后程序执行完veg()即终止,如何执行后续代码?
解决click.command执行后程序终止的问题
嘿,这个问题我之前也碰到过!原因其实是@click.command()装饰器的默认行为在搞鬼——当你的veg()函数执行完之后,click会自动调用sys.exit()来终止整个程序,所以后面的print('End function')根本没机会运行。
最简单的解决方案
只需要修改主程序里调用函数的方式,使用veg.main(standalone_mode=False)替代直接调用veg()即可。standalone_mode=False会告诉click不要接管程序的退出流程,函数执行完毕后会回到主逻辑继续运行后续代码。
修改后的完整代码如下:
import click import random @click.command() @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total): """ Basic method will return a random vegetable""" for number in range(total): print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg.main(standalone_mode=False) print('End function')
补充说明
如果你的场景需要在命令执行前后做更多统一的收尾工作,还可以考虑用click的钩子函数(比如@click.pass_context配合上下文回调),但对于你的需求来说,设置standalone_mode=False已经足够简单直接。
内容的提问来源于stack exchange,提问作者Pythoner
相关产品推荐
相关产品推荐

