我正在用Python开发命令行界面(CLI)应用程序。它由一个入口点
app
| cli.py
|____commands
| __init.py__
| sub_command1.py
| sub_command2.py
我最初的方法是在每个子命令模块中定义一个函数 register_subcommand ,并在 cli.py 中分别调用它们。由于这有点冗长,并且我希望能够在不更改其他文件的情况下插入子命令,所以我选择了另一种方法
我当前正在使用Pub-Sub为子命令注册CLI并调用它们。这样做的好处是可以直接插入子模块。但是,现在导入模块看起来很奇怪,因为导入未使用且仅用于副作用(注册子模块)。
# cli.py (this is just a template, not working code)
import app.commands # unused import
parser = argparse.ArgumentParser()
publish_event('register_subcommand', parser)
args = parser.parse_args()
publish_event('execute_subcammnd', args)
# sub-command1.py
@subscribe('register_sub_modules')
def register_subcommand(parser):
pass
@subscribe('execute_subcammnd')
def execute_subcommand(args):
pass
# __init__.py
# Imports all sub_command modules in the package
这在Python中通常是不好的做法吗?不利之处是什么?有更好的设计来实现这一目标吗?