如何在Python的Cement框架中创建名为import的命令?
Cement CLI 解决Python关键字作为命令名的问题
直接用Cement提供的命令自定义机制就能解决,不需要折腾鸭子类型,下面是两种靠谱的实现方式:
方法一:通过@ex装饰器指定命令名
Cement的@ex(命令装饰器的别名)支持显式设置name参数,让函数名用合法标识符,对外暴露的命令名设为import:
from cement import App, Controller, ex class BaseController(Controller): class Meta: label = 'base' description = '我的CLI应用' @ex( help='将数据导入系统', name='import' # 这里指定命令名为import ) def cmd_import(self): # 编写你的命令逻辑 print("执行import命令") class MyApp(App): class Meta: label = 'myapp' base_controller = BaseController if __name__ == '__main__': with MyApp() as app: app.run()
方法二:手动注册命令映射
如果习惯通过控制器元数据定义命令,可以在commands列表里手动关联命令名和处理函数:
from cement import App, Controller, Command class BaseController(Controller): class Meta: label = 'base' description = '我的CLI应用' commands = [ Command( name='import', help='将数据导入系统', handler='_handle_import' # 指定处理函数 ) ] def _handle_import(self): print("执行import命令") class MyApp(App): class Meta: label = 'myapp' base_controller = BaseController if __name__ == '__main__': with MyApp() as app: app.run()
这两种方式都完全符合Cement的设计规范,避开了Python关键字不能作为函数名的限制,运行后直接输入myapp import就能触发对应的命令逻辑。
内容的提问来源于stack exchange,提问作者racerj93
相关产品推荐
相关产品推荐

