plugins pattern + sub命令

时间:2016-05-02 15:35:58

标签: python command-line argparse

我将使用插件功能执行命令行应用程序,每个新插件将由__main__.py脚本的子命令调用。

我曾经使用过argparse。我想知道是否有可能使用argparse实现sud命令+插件看起来像(我发现了一些工具但是使用了已弃用的软件包)?

myfantasticCLI
├── __main__.py
└── plugins
    ├── create.py
    ├── notify.py
    └── test.py

我知道我可以使用argparse作为子命令,但不知道如何使用动态加载方式。 :/

1 个答案:

答案 0 :(得分:1)

如果使用

初始化argparse子分析符
sp = parser.add_subparsers(dest='cmd',...)

然后在解析args.cmd之后将是所选子析符或命令的名称。

然后,一个简单的if树可以导入并运行所需的模块

cmd = args.cmd
if cmd in ['module1',...]:
   import plugins.module1 as mod:
   mod.run(...)
elif cmd in ['module2',....]:
   import plugins.module2 as mod:
   ...

有更好的方法可以做到这一点,但我更喜欢从明显的开始。

此外,我的重点是从解析器获取cmd名称,而不是导入给定名称的模块的详细信息。您不需要argparse来测试问题的import given a name部分。