使用Python与Pub-Sub进行模块间通信

时间:2018-12-17 05:01:16

标签: python python-3.x command-line-interface argparse publish-subscribe

我正在用Python开发命令行界面(CLI)应用程序。它由一个入口点 cli.py 组成,该入口点使用 argparse 定义了一个CLI解析器。还有一个 commands 软件包,其中包含几个模块,这些模块使用各自的子命令扩展了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中通常是不好的做法吗?不利之处是什么?有更好的设计来实现这一目标吗?

0 个答案:

没有答案